99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0001 
Version 2.0 (Weiand 1985)     Options : LCSFPF                                  
[0001]               ***********************************************************
[0002]                      TITL 'RXB 2015'
[0003]               ***********************************************************
[0004]                      GROM >A000
[0005]               ***********************************************************
[0006]                      TITL 'EQUATES EXEC-359'
[0007]               ***********************************************************
[0008]               *           GROM ADDRESSES
[0009]               ***********************************************************
[0010]               *    EQUATES FOR ROUTINES FROM OTHER GROM SECTIONS
[0011]               * GROM >0000
[0012] 0022          GRINT  EQU  >0022             Greatest integer
[0013]               * GROM >6000 EQUATES
[0014] 6016          SPRINT EQU  >6016             Initialize sprites
[0015] 6018          CHRTBL EQU  >6018             RXB CALL CHRTBL load char set
[0016] 601A          TOPL10 EQU  >601A             Return to main and re-init
[0017] 601C          CHRTAB EQU  >601C             Load default character set
[0018] 601E          SZRUN  EQU  >601E
[0019] 6022          KILSYM EQU  >6022             KILL SYMBOL TABLE ROUTINE
[0020] 602E          AUTO1  EQU  >602E             Get arguments for LIST comman
[0021] 6030          TOPL02 EQU  >6030             RTN address for failing AUTOL
[0022] 6032          EDITLN EQU  >6032             Edit a line into the program
[0023] 6034          GRSUB1 EQU  >6034             Read data (2 bytes) from ERAM
[0024] 6036          GWSUB  EQU  >6036             Write a few bytes of data to
[0025] 6048          MSGBRK EQU  >6048             * BREAKPOINT
[0026] 6053          MSGTA  EQU  >6053             Message "try again"
[0027] 6372          TOPLEV EQU  >6372             RXB CALL USER branch
[0028] 6A78          CHKEND EQU  >6A78             Check end of statement
[0029] 6A7C          DISO   EQU  >6A7C
[0030] 6A7E          ENTER  EQU  >6A7E
[0031] 6A80          ENT09  EQU  >6A80
[0032] 6A82          WARNZZ EQU  >6A82             WARNING MESSAGE ROUTINE
[0033] 6A84          ERRZZ  EQU  >6A84             ERROR MESSAGE ROUTINE
[0034] 6A84          ERRZ   EQU  >6A84             ERRor routine
[0035] 6A86          READL1 EQU  >6A86             Read a line from keyboard
[0036] 63A5          SZNEW  EQU  >63A5             RXB CALL NEW branch
[0037] 63DD          TOPL15 EQU  >63DD             RXB CALL USER branch
[0038] 65C9          SZSIZE EQU  >65C9             RXB CALL SIZE branch
[0039]               * GROM >8000
[0040] 8000          DISPL1 EQU  >8000
[0041] 8002          DELET  EQU  >8002
[0042] 8004          PRINT  EQU  >8004
[0043] 8006          INPUT  EQU  >8006
[0044] 8008          OPEN   EQU  >8008
[0045] 800A          CLOSE  EQU  >800A
[0046] 800C          RESTOR EQU  >800C
[0047] 800E          NREAD  EQU  >800E
[0048] 8012          CLSALL EQU  >8012             RXB branch
[0049] 801C          EOF    EQU  >801C
[0050] 801E          ACCEPT EQU  >801E
[0051] 8020          SRDATA EQU  >8020
[0052] 8022          REC    EQU  >8022
[0053] 802C          GRSUB2 EQU  >802C
[0054] 802E          GRSUB3 EQU  >802E
[0055] 8030          LINPUT EQU  >8030
[0056] 9CEA          CHARS  EQU  >9CEA             RXB Character Definitions
[0057]               * GROM >E000
[0058] E025          GE025  EQU  >E025             RXB branch EA module
[0059]               ***********************************************************
[0060]               *    Equates for XMLs
[0061] 0000          SYNCHK EQU  >00               SYNCHK XML selector
[0062] 0001          FILSPC EQU  >01               Fill-space utility
[0063] 0001          PARCOM EQU  >01               PARse to a COMma selector
[0064] 0002          CSTRIN EQU  >02               Copy-string utility
[0065] 0002          RANGE  EQU  >02               RANGE selector

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0002 
EQUATES EXEC-359
[0066] 0003          SEETWO EQU  >03               SEETWO XML selector
[0067] 0006          FADD   EQU  >06               Floating ADD
[0068] 0008          FMUL   EQU  >08               Floating MULtiply
[0069] 0009          FDIV   EQU  >09               Floating DIVide
[0070] 000A          FCOMP  EQU  >0A               Floating COMPare
[0071] 000B          SADD   EQU  >0B               Stack ADD
[0072] 000C          SSUB   EQU  >0C               Stack SUBtract
[0073] 0010          CSNUM  EQU  >10               Convert String to Number
[0074] 0012          CFI    EQU  >12               Convert to two byte integer
[0075] 0012          FLTINT EQU  >12               Convert floating to integer
[0076] 0070          COMPCT EQU  >70               PREFORM A GARBAGE COLLECTION
[0077] 0071          GETSTR EQU  >71               SYSTEM GET STRING
[0078] 0072          MEMCHK EQU  >72               MEMORY check routine: VDP
[0079] 0073          XCNS   EQU  >73               Convert number to string
[0080]               * Warning Defualt changfd in >0079
[0081] 0074          PARSE  EQU  >74               Parse a value
[0082] 0075          CONT   EQU  >75               Continue parsing
[0083] 0076          EXECG  EQU  >76               Execute a XB stmt or program
[0084] 0077          VPUSH  EQU  >77               Push on value stack
[0085] 0078          VPOP   EQU  >78               Pop off value stack
[0086] 0079          PGMCHR EQU  >79               GET PROGRAM CHARACTER
[0087] 007A          SYM    EQU  >7A               Find SYMBOL entry
[0088] 007B          SMB    EQU  >7B               Find symbol table entry
[0089] 007C          ASSGNV EQU  >7C               Assign VARIABLE
[0090] 007D          SCHSYM EQU  >7D               Search symbol table
[0091] 007E          SPEED  EQU  >7E               SPEED UP XML
[0092] 007F          CRUNCH EQU  >7F               Crunch an input line
[0093] 0080          CIF    EQU  >80               Convert INTEGER to FLOATING P
[0094] 0082          RTNB   EQU  >82               Return
[0095] 0083          SCROLL EQU  >83               SCROLL THE SCREEN
[0096] 0084          IO     EQU  >84               IO utility (KW table search)
[0097] 0085          GREAD  EQU  >85               READ DATA FROM ERAM
[0098] 0086          GWRITE EQU  >86               WRITE DATA TO ERAM
[0099] 0087          DELREP EQU  >87               REMOVE CONTENT FROM VDP/ERAM
[0100] 0088          MVDN   EQU  >88               MOVE DATA IN VDP/ERAM
[0101] 0089          MVUP   EQU  >89               MOVE DATA IN VDP/ERAM
[0102] 008A          VGWITE EQU  >8A               MOVE DATA FROM VDP TO ERAM
[0103] 008B          GVWITE EQU  >8B               WRITE DATA FROM GRAM TO VRAM
[0104] 008C          GREAD1 EQU  >8C               READ DATA FROM ERAM
[0105] 008E          GDTECT EQU  >8E               ERAM DETECT&ROM PAGE 1 ENABLE
[0106] 008F          SCNSMT EQU  >8F               SCAN STATEMENT FOR PRESCAN
[0107]               ***********************************************************
[0108]               *    Temporary workspaces in EDIT
[0109] 8300          VAR0   EQU  >8300            TEMPORARY
[0110] 8300          SP00   EQU  >8300            SPRITE value
[0111] 8300          PTFBSL EQU  >8300            Ptr to 1st byte in SPEAK list
[0112] 8300          PHLEN  EQU  >8300            PHrom data LENgth
[0113] 8301          VARV   EQU  >8301            TEMPORARY
[0114] 8301          PHRADD EQU  >8301            PHRom ADDress
[0115] 8302          ACCUM  EQU  >8302            # OF BYTES ACCUMULATOR (4 BYTE
[0116] 8302          STPT   EQU  >8302            TWO BYTES
[0117] 8302          MNUM   EQU  >8302            Ussually a counter
[0118] 8302          AAA1   EQU  >8302
[0119] 8302          SP02   EQU  >8302            SPRITE value
[0120] 8302          PTLBSL EQU  >8302            Ptr to last byte in SPEAK list
[0121] 8304          VARY   EQU  >8304
[0122] 8304          PABPTR EQU  >8304            Pointer to current PAB
[0123] 8304          SP04   EQU  >8304            SPRITE value
[0124] 8304          PTEBSL EQU  >8304            Ptr to end byte in SPEAK list
[0125]               * NOTE: PTEBSL points to the end of the temporary speak lis
[0126]               *       whereas PTLBSL points to the last byte actually use
[0127]               *       i.e.    PTFBSL <= PTLBSL <= PTEBSL
[0128] 8306          VARY2  EQU  >8306            Use in MVDN only
[0129] 8306          DFLTLM EQU  >8306            Default array limit (10)

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0003 
EQUATES EXEC-359
[0130] 8306          CCPPTR EQU  >8306            OFFSET WITHIN RECORED (1)
[0131]               *                             or Pointer to current column
[0132] 8306          SP06   EQU  >8306            SPRITE value
[0133] 8306          PTFCIS EQU  >8306            Ptr to 1st character in string
[0134] 8307          RECLEN EQU  >8307            LENGTH OF CURRENT RECORD (1)
[0135] 8308          CCPADR EQU  >8308            RAM address of current refs
[0136]               *                             or Actual buffer address or c
[0137] 8308          VARC   EQU  >8308
[0138] 8308          CCPADD EQU  >8308            RAM address of current color
[0139] 8308          CCC1   EQU  >8308
[0140] 8308          SPSAL  EQU  >8308            Location of sprite attribute l
[0141] 8308          PTCCIS EQU  >8308            Ptr to current character in st
[0142] 830A          CALIST EQU  >830A            Call list for resolving refs
[0143] 830A          RAMPTR EQU  >830A            Pointer for crunching
[0144] 830A          STADDR EQU  >830A            Start address - usually for co
[0145] 830A          SPTMP  EQU  >830A            Temporary variable
[0146] 830A          PTLCIS EQU  >830A            Ptr to last character in strin
[0147] 830B          VAR2   EQU  >830B
[0148] 830C          BYTES  EQU  >830C            BYTE COUNTER
[0149]               *                             or String length for GETSTR
[0150] 830C          NMPTR  EQU  >830C            Pointer save for pscan
[0151] 830C          BBB1   EQU  >830C
[0152] 830C          PTFCIP EQU  >830C            Ptr to 1st character in phrase
[0153] 830E          CHSAV  EQU  >830E
[0154] 830E          CURINC EQU  >830E            Increment for auto-num mode
[0155] 830E          VAR4   EQU  >830E
[0156] 830E          PTCCIP EQU  >830E            Ptr to current character in ph
[0157] 8310          TOPSTK EQU  >8310            Top of data stack pointer
[0158] 8310          VAR5   EQU  >8310            VAR5 through VAR5+3 used in RA
[0159] 8310          PTLCIP EQU  >8310            Ptr to last character in phras
[0160] 8311          VAR6   EQU  >8311
[0161] 8312          LINUM  EQU  >8312            Used to determine end of scan
[0162] 8312          PTFBPH EQU  >8312            Ptr to 1st byte in PHrom
[0163] 8312          VAR7   EQU  >8312            Used in CHARLY
[0164] 8312          STRPTR EQU  >8312            RXB PATCH CODE
[0165] 8314          NMLEN  EQU  >8314            Current line for auto-num
[0166] 8314          CURLIN EQU  >8314            Current line for auto-num
[0167]               *                             or Starting line number for L
[0168] 8314          PTCCPH EQU  >8314            Ptr to current byte in PHrom
[0169] 8314          VAR9   EQU  >8314             Used in CHARLY
[0170] 8316          XFLAG  EQU  >8316            SCAN FLAG-BITS USED AS BELOW
[0171] 8316          PTLCPH EQU  >8316            Ptr to last byte in PHrom
[0172] 8317          DSRFLG EQU  >8317            INTERNAL =60, EXTERNAL =0 (1)
[0173] 8317          OPTFLG EQU  >8317            Option flag byte during OPEN
[0174] 8317          FORNET EQU  >8317            Nesting level of for/next
[0175] 8317          FNUM   EQU  >8317            Current file number for search
[0176]               ***********************************************************
[0177]               *    Permanent workspace variables
[0178] 8318          STRSP  EQU  >8318            String space begining
[0179] 831A          STREND EQU  >831A            String space ending
[0180] 831C          SREF   EQU  >831C            Temporary string pointer
[0181] 831E          SMTSRT EQU  >831E            Start of current statement
[0182] 8320          VARW   EQU  >8320            Screen address (CURSOR)
[0183] 8322          ERRCOD EQU  >8322            Return error code from ALC
[0184] 8324          STVSPT EQU  >8324            Value-stack base
[0185] 8326          RTNG   EQU  >8326            Return vector from 9900 code
[0186] 8328          NUDTAB EQU  >8328            Start of NUD table
[0187] 832A          VARA   EQU  >832A            Ending display location
[0188] 832C          PGMPTR EQU  >832C            Program text pointer (TOKEN)
[0189] 832E          EXTRAM EQU  >832E            Line number table pointer
[0190] 8330          STLN   EQU  >8330            Start of line number table
[0191] 8332          ENLN   EQU  >8332            End of line number table
[0192] 8334          DATA   EQU  >8334            Data pointer for READ
[0193] 8336          LNBUF  EQU  >8336            Line table pointer for READ

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0004 
EQUATES EXEC-359
[0194] 8338          INTRIN EQU  >8338            Add of intrinsic poly constant
[0195] 833A          SUBTAB EQU  >833A            Subprogram symbol table
[0196] 833C          IOSTRT EQU  >833C            PAB list/Start of I/O chain
[0197] 833E          SYMTAB EQU  >833E            Symbol table pointer
[0198] 8340          FREPTR EQU  >8340            Free space pointer
[0199] 8342          CHAT   EQU  >8342            Current charater/token
[0200] 8343          BASE   EQU  >8343            OPTION BASE value
[0201] 8344          PRGFLG EQU  >8344            Program/imperative flag
[0202] 8345          FLAG   EQU  >8345            General 8-bit flag
[0203] 8346          BUFLEV EQU  >8346            Crunch-buffer destruction leve
[0204] 8348          LSUBP  EQU  >8348            Last subprogram block on stack
[0205]               * FAC  EQU  >834A            Floating-point ACcurmulator
[0206] 834A          CCHAR  EQU  >834A            Current character
[0207] 834B          FAC1   EQU  FAC+1
[0208] 834B          SPLFLG EQU  >834B            SPelL out phrase FLaG
[0209] 834C          FAC2   EQU  FAC+2
[0210] 834C          AAA    EQU  FAC+2
[0211] 834C          TOTTIM EQU  >834C            TOTal wait TIMe
[0212]               * NOTE: DATAD must follow immediately after TOTTIM. The
[0213]               *       routine STDATA is counting on this fact!
[0214] 834D          FAC3   EQU  FAC+3
[0215] 834D          DATAAD EQU  >834D            Speech DATA ADdress
[0216] 834E          FAC4   EQU  FAC+4
[0217] 834E          CCC    EQU  FAC+4
[0218] 834E          FFF    EQU  FAC+4
[0219] 834F          FAC5   EQU  FAC+5
[0220] 834F          PTLCIL EQU  >834F            Pointer To Last Character In L
[0221] 8350          FAC6   EQU  FAC+6
[0222] 8350          BBB    EQU  FAC+6
[0223] 8350          EEE    EQU  FAC+6
[0224] 8351          FAC7   EQU  FAC+7
[0225] 8351          TIMLEN EQU  >8351             TIMe LENgth of timing charact
[0226] 8352          FAC8   EQU  FAC+8
[0227] 8352          PHADDR EQU  >8352             PHrom ADDRess
[0228] 8353          FAC9   EQU  FAC+9
[0229] 8354          FAC10  EQU  FAC+10
[0230] 8354          DDD1   EQU  FAC+10
[0231] 8354          TEMP1  EQU  >8354            TEMPorary CPU location 1
[0232] 8355          FAC11  EQU  FAC+11
[0233] 8356          FAC12  EQU  FAC+12
[0234] 8356          FFF1   EQU  FAC+12
[0235] 8356          TEMP2  EQU  >8356            TEMPorary CPU location 2
[0236] 8357          FAC13  EQU  FAC+13
[0237] 8358          FAC14  EQU  FAC+14
[0238] 8358          EEE1   EQU  FAC+14
[0239] 8358          READ   EQU  >8358            Address of speech peripheral
[0240]               *                             READ byte interface
[0241] 8359          FAC15  EQU  FAC+15
[0242] 835A          FAC16  EQU  FAC+16
[0243] 835A          WRITE  EQU  >835A            Address of speech peripheral
[0244]               *                             WRITE byte interface
[0245] 835B          FAC17  EQU  FAC+17
[0246]               * ARG  EQU  >835C            Floating-point ARGument
[0247] 835D          ARG1   EQU  ARG+1
[0248] 835D          PHDATA EQU  >835D            PHrom DATA
[0249] 835E          ARG2   EQU  ARG+2
[0250] 835E          PTCBED EQU  >835E            Ptr To Current Byte Ext Data
[0251] 835F          ARG3   EQU  ARG+3
[0252] 8360          ARG4   EQU  ARG+4
[0253] 8360          LENCST EQU  >8360            LEN of Current ext data STring
[0254] 8361          ARG5   EQU  ARG+5
[0255] 8362          ARG6   EQU  ARG+6
[0256] 8362          LENWST EQU  >8362            LEN of Whole ext data STring
[0257] 8363          ARG7   EQU  ARG+7

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0005 
EQUATES EXEC-359
[0258] 8364          ARG8   EQU  ARG+8
[0259] 8364          STRLEN EQU  >8364            STRing LENgth
[0260] 8364          TEMP4  EQU  >8364
[0261] 8366          TEMP5  EQU  >8366
[0262]               * NOTE: BYTE1, BYTE2, and BYTE3 must be in consecutive memo
[0263]               *       locations, and in the following order for SPGET to
[0264]               *       work!
[0265] 8366          BYTE1  EQU  >8366            BYTE 1
[0266] 8367          BYTE2  EQU  >8367            BYTE 2
[0267] 8368          BYTE3  EQU  >8368            BYTE 3
[0268] 8368          TEMP6  EQU  >8368
[0269] 8369          SPKSTS EQU  >8369            SPeaK StaTus
[0270]               * FPERAD EQU  >836C          Value stack pointer
[0271] 8367          ARG11  EQU  ARG+11
[0272] 836B          ARG15  EQU  ARG+15
[0273] 836C          ARG16  EQU  ARG+16
[0274]               * VSPTR  EQU  >836E          Value stack pointer
[0275]               ***********************************************************
[0276]               *    GPL Status Block
[0277] 8370          HIVDP  EQU  >8370             Highest VDP Available
[0278]               * SUBSTK EQU  >8373           SUBROUTINE STACK
[0279] 8374          KEYBD  EQU  >8374             KEYBOARD SELCTION
[0280] 8375          RKEY   EQU  >8375             KEY CODE
[0281] 8376          EXPZ   EQU  >8376             Exponent in floating-point
[0282] 8376          JOYY   EQU  >8376             JOYSTICK Y POSITION
[0283] 8377          JOYX   EQU  >8377             JOYSTICK X POSITION
[0284] 8378          RANDOM EQU  >8378             RANDOM NUMBER GENERATOR
[0285] 8379          TIMER  EQU  >8379             TIMING REGISTER
[0286] 837A          MOTION EQU  >837A             NUMBER OF MOVING SPRITES
[0287] 837B          VDPSTS EQU  >837B             VDP STATUS REGISTER
[0288] 837B          VDPSTT EQU  >837B             VDP STATUS REGISTER
[0289] 837C          ERCODE EQU  >837C             STATUS REGISTER
[0290] 837D          CB     EQU  >837D             Character Buffer
[0291]               ***********************************************************
[0292] 8384          RAMTOP EQU  >8384            Highest address in ERAM
[0293] 8386          RAMFRE EQU  >8386            Free pointer in the ERAM
[0294] 8388          RSTK   EQU  >8388            Subroutine stack base
[0295]               *                             (Starts at >8A)
[0296] 8389          RAMFLG EQU  >8389            ERAM flag
[0297] 8389          GRAMFL EQU  >8389            GRAM / VDP flag
[0298] 83AF          STKMIN EQU  >83AF            Base of data stack
[0299] 83BD          STKMAX EQU  >83BD            Top of data stack
[0300] 83CE          PRTNFN EQU  >83CE            Sound - previous tone finished
[0301]               ***********************************************************
[0302]               *    VDP addresses
[0303] 02E0          SCRNBS EQU  >02E0             Screen base addr for last lin
[0304] 02E2          NLNADD EQU  >02E2             New LiNe ADDress
[0305] 02FE          ENDSCR EQU  >02FE             END of SCReen address
[0306] 0300          SPRSAL EQU  >0300             Sprite attribute list
[0307] 0371          LODFLG EQU  >0371             Auto-boot flag
[0308] 0372          START  EQU  >0372             Line to start execution at
[0309]               * Temporary
[0310] 0374          NOTONE EQU  >0374             NO-TONE for SIZE in ACCEPT us
[0311]               *                              in FLMGRS (4 bytes used)
[0312] 0376          SYMBOL EQU  >0376             Saved symbol table pointer
[0313] 0378          ONECHR EQU  >0378             Used for CHRZ
[0314] 0379          VRMSND EQU  >0379             Sound blocks
[0315] 0382          SPGMPT EQU  >0382             Saved PGMPTR for continue
[0316] 0384          SBUFLV EQU  >0384             Saved BUFLEV for contiue
[0317] 0386          SEXTRM EQU  >0386             Saved EXTRAM for continue
[0318] 0388          SAVEVP EQU  >0388             Saved VSPRT for continue
[0319] 038A          ERRLN  EQU  >038A             On-error line pointer
[0320] 0390          CSNTMP EQU  >0390             Use as temporary stored place
[0321]               *                          or CSN TEMPORARY FOR FAC12

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0006 
EQUATES EXEC-359
[0322] 0392          TABSAV EQU  >0392             Saved main symbol table ponte
[0323] 0394          AUTTMP EQU  >0394             AUTOLD TEMPORARY IN SIDE ERRZ
[0324] 0396          SLSUBP EQU  >0396             Saved LSUBP for continue
[0325] 0398          SFLAG  EQU  >0398             Saved on-warning/break bits
[0326] 039A          SSTEMP EQU  >039A             To save subprogram program ta
[0327] 039C          SSTMP2 EQU  >039C             Same as above. Used in SUBPRO
[0328] 039E          MRGPAB EQU  >039E             MERGEd temporary for pab ptr
[0329] 03A0          RNDX2  EQU  >03A0             Random number generator seed
[0330] 03A5          RNDX1  EQU  >03A5             Random number generator seed
[0331] 03AA          INPUTP EQU  >03AA             INPUT TEMPORARY FOR PTR TO PR
[0332] 03AA          SPNUM  EQU  >03AA             Sprite number temporary, also
[0333]               *                              in INPUTP in FLMGR
[0334] 03AC          ACCVRW EQU  >03AC             Temoporary used in ERRZZ, als
[0335]               *                              used in FLMGRS
[0336]               *                             or temporary for @VARW, @VARA
[0337] 03AE          ACCVRA EQU  >03AE             TRY AGAIN
[0338] 03B0          VALIDP EQU  >03B0             Use as two values passing fro
[0339]               *                          or PTR TO STANDARD STRING IN VAL
[0340] 03B2          VALIDL EQU  >03B2             VALIDATE code to READL1
[0341]               *                          or Length of string in validate
[0342] 03B4          SIZCCP EQU  >03B4             SIZE TEMPORARY FOR CCPADR
[0343] 03B6          SIZREC EQU  >03B6             SIZE TEMPORARY FOR RECLEN
[0344]               *
[0345] 03B7          ACCTRY EQU  >03B7             ACCEPT "TRY AGAIN" FLAG
[0346] 03B8          SIZXPT EQU  >03B8             Save XPT in SIZE when "try ag
[0347] 03BA          CSNTP1 EQU  >03BA             CSN TEMPORARY FOR FAC10
[0348]               *
[0349] 03BC          OLDTOP EQU  >03BC             Temporary used in ERRZZ, also
[0350]               *                          or Old top of memory for RELOCA
[0351] 03BC          CPTEMP EQU  >03BC             CCPPTR, RECLEN temp in INPUT
[0352] 03BE          NEWTOP EQU  >03BE             New top of memory for RELOCA
[0353] 03C0          VROAZ  EQU  >03C0             Temporary roll-out area
[0354] 07FF          SPRVB  EQU  >07FF             Sprite velocity block.
[0355] 0820          CRNBUF EQU  >0820             CRuNch BUFfer address
[0356] 08BE          CRNEND EQU  >08BE             CRuNch buffer END
[0357] 0958          VRAMVS EQU  >0958             Default base of value stack
[0358]               ***********************************************************
[0359]               *    IMMEDITATE VALUES
[0360] 0000          NUMBR  EQU  >00               NUMERIC validate
[0361] 0002          LISTZ  EQU  >02
[0362] 0003          X2     EQU  >03
[0363] 0005          OLDZ   EQU  >05
[0364] 0006          RESEQZ EQU  >06
[0365] 0007          SAVEZ  EQU  >07
[0366] 0008          MERGEZ EQU  >08
[0367] 000A          DWNARR EQU  >0A
[0368] 000B          UPARR  EQU  >0B
[0369] 000D          CHRTN  EQU  >0D
[0370] 0020          BKGD   EQU  >20               BACKGROUND CHARACTER
[0371] 0060          OFFSET EQU  >60               OFFSET FOR VIDEO TABLES
[0372] 0065          STRVAL EQU  >65               Value in accum. is string val
[0373]               ***********************************************************
[0374]               * Editting command equates & keys or symbols
[0375] 0002          BREAK  EQU  >02               Break key
[0376] 0003          DLETE  EQU  >03               Delete key
[0377] 0004          INSRT  EQU  >04               Insert key
[0378] 0006          RECALL EQU  >06               Edit-buffer recall
[0379] 0007          CLRLN  EQU  >07               Clear-line key
[0380] 0008          BACK   EQU  >08               Back-space key
[0381] 0009          FORW   EQU  >09               Forward-space key
[0382] 000A          DOWN   EQU  >0A               Down-arrow key
[0383] 000B          UPMV   EQU  >0B               Up-arrow key
[0384] 001C          VWIDTH EQU  >1C               Screen width (PRINT)
[0385] 0020          SPACE  EQU  >20               Space key

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0007 
EQUATES EXEC-359
[0386] 0022          QUOTE  EQU  >22               "
[0387] 0023          NUMBER EQU  >23               #
[0388] 0024          DOLLAR EQU  >24               $
[0389] 007E          CURSOR EQU  >1E+OFFSET        CURSOR
[0390] 007F          EDGECH EQU  >1F+OFFSET        EDGE character
[0391] 002B          PLUS   EQU  >2B               +
[0392] 002C          COMMAT EQU  >2C               ,
[0393] 002D          MINUS  EQU  >2D               -
[0394] 002D          HYPEN  EQU  >2D               +
[0395] 002E          PERIOD EQU  >2E               .
[0396] 0030          ZERO   EQU  >30               0
[0397] 0039          NINE   EQU  >39               9
[0398] 003A          COLON  EQU  >3A               :
[0399] 003B          SEMICO EQU  >3B               ;
[0400] 003C          LESS   EQU  >3C               <
[0401] 003E          GREAT  EQU  >3E               >
[0402] 0041          A      EQU  >41               A
[0403] 0046          F      EQU  >46               F
[0404]               ***********************************************************
[0405]               *    BASIC TOKEN TABLE
[0406]               *      EQU  >80               spare token
[0407] 0081          ELSEZ  EQU  >81               ELSE
[0408] 0082          SSEPZ  EQU  >82               ::
[0409] 0083          TREMZ  EQU  >83               $
[0410] 0084          IFZ    EQU  >84               IF
[0411] 0085          GOZ    EQU  >85               GO
[0412] 0086          GOTOZ  EQU  >86               GOTO
[0413] 0087          GOSUBZ EQU  >87               GOSUB
[0414] 0088          RETURZ EQU  >88               RETURN
[0415] 0089          DEFZ   EQU  >89               DEF
[0416] 008A          DIMZ   EQU  >8A               DIM
[0417] 008B          ENDZ   EQU  >8B               END
[0418] 008C          FORZ   EQU  >8C               FOR
[0419] 008D          LETZ   EQU  >8D               LET
[0420] 008E          BREAKZ EQU  >8E               BREAK
[0421] 008F          UNBREZ EQU  >8F               UNBREAK
[0422] 0090          TRACEZ EQU  >90               TRACE
[0423] 0091          UNTRAZ EQU  >91               UNTRACE
[0424] 0092          INPUTZ EQU  >92               INPUT
[0425] 0093          DATAZ  EQU  >93               DATA
[0426] 0094          RESTOZ EQU  >94               RESTORE
[0427] 0095          RANDOZ EQU  >95               RANDOMIZE
[0428] 0096          NEXTZ  EQU  >96               NEXT
[0429] 0097          READZ  EQU  >97               READ
[0430] 0098          STOPZ  EQU  >98               STOP
[0431] 0099          DELETZ EQU  >99               DELETE
[0432] 009A          REMZ   EQU  >9A               REM
[0433] 009B          ONZ    EQU  >9B               ON
[0434] 009C          PRINTZ EQU  >9C               PRINT
[0435] 009D          CALLZ  EQU  >9D               CALL
[0436] 009E          OPTIOZ EQU  >9E               OPTION
[0437] 009F          OPENZ  EQU  >9F               OPEN
[0438] 00A0          CLOSEZ EQU  >A0               CLOSE
[0439] 00A1          SUBZ   EQU  >A1               SUB
[0440] 00A2          DISPLZ EQU  >A2               DISPLAY
[0441] 00A3          IMAGEZ EQU  >A3               IMAGE
[0442] 00A4          ACCEPZ EQU  >A4               ACCEPT
[0443] 00A5          ERRORZ EQU  >A5               ERROR
[0444] 00A6          WARNZ  EQU  >A6               WARNING
[0445] 00A7          SUBXTZ EQU  >A7               SUBEXIT
[0446] 00A8          SUBNDZ EQU  >A8               SUBEND
[0447] 00A9          RUNZ   EQU  >A9               RUN
[0448] 00AA          LINPUZ EQU  >AA               LINPUT
[0449]               *      EQU  >AB               spare token (LIBRARY)

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0008 
EQUATES EXEC-359
[0450]               *      EQU  >AC               spare token (REAL)
[0451]               *      EQU  >AD               spare token (INTEGER)
[0452]               *      EQU  >AE               spare token (SCRATCH)
[0453]               *      EQU  >AF               spare token
[0454] 00B0          THENZ  EQU  >B0               THEN
[0455] 00B1          TOZ    EQU  >B1               TO
[0456] 00B2          STEPZ  EQU  >B2               STEP
[0457] 00B3          COMMAZ EQU  >B3               ,
[0458] 00B4          SEMICZ EQU  >B4               ;
[0459] 00B5          COLONZ EQU  >B5               :
[0460] 00B6          RPARZ  EQU  >B6               )
[0461] 00B7          LPARZ  EQU  >B7               (
[0462] 00B8          CONCZ  EQU  >B8               &          (CONCATENATE)
[0463]               *      EQU  >B9               spare token
[0464] 00BA          ORZ    EQU  >BA               OR
[0465] 00BB          ANDZ   EQU  >BB               AND
[0466] 00BC          XORZ   EQU  >BC               XOR
[0467] 00BD          NOTZ   EQU  >BD               NOT
[0468] 00BE          EQUALZ EQU  >BE               =
[0469] 00BF          LESSZ  EQU  >BF               <
[0470] 00C0          GREATZ EQU  >C0               >
[0471] 00C1          PLUSZ  EQU  >C1               +
[0472] 00C2          MINUSZ EQU  >C2               -
[0473] 00C3          MULTZ  EQU  >C3               *
[0474] 00C4          DIVIZ  EQU  >C4               /
[0475] 00C5          CIRCUZ EQU  >C5               ^
[0476]               *      EQU  >C6               spare token
[0477] 00C7          STRINZ EQU  >C7               QUOTED STRING
[0478] 00C8          UNQSTZ EQU  >C8               UNQUOTED STRING
[0479] 00C8          NUMZ   EQU  >C8               ALSO NUMERICAL STRING
[0480] 00C8          NUMCOZ EQU  >C8               ALSO UNQUOTED STRING
[0481] 00C9          LNZ    EQU  >C9               LINE NUMBER CONSTANT
[0482]               *      EQU  >CA               spare token
[0483] 00CB          ABSZ   EQU  >CB               ABS
[0484] 00CC          ATNZ   EQU  >CC               ATN
[0485] 00CD          COSZ   EQU  >CD               COS
[0486] 00CE          EXPZZ  EQU  >CE               EXP
[0487] 00CF          INTZ   EQU  >CF               INT
[0488] 00D0          LOGZ   EQU  >D0               LOG
[0489] 00D1          SGNZZ  EQU  >D1               SGN
[0490] 00D2          SINZ   EQU  >D2               SIN
[0491] 00D3          SQRZ   EQU  >D3               SQR
[0492] 00D4          TANZ   EQU  >D4               TAN
[0493] 00D5          LENZ   EQU  >D5               LEN
[0494] 00D6          CHRZZ  EQU  >D6               CHR$
[0495] 00D7          RNDZ   EQU  >D7               RND
[0496] 00D8          SEGZZ  EQU  >D8               SEG$
[0497] 00D9          POSZ   EQU  >D9               POS
[0498] 00DA          VAL    EQU  >DA               VAL
[0499] 00DB          STRZZ  EQU  >DB               STR$
[0500] 00DC          ASCZ   EQU  >DC               ASC
[0501] 00DD          PIZ    EQU  >DD               PI
[0502] 00DE          RECZ   EQU  >DE               REC
[0503] 00DF          MAXZ   EQU  >DF               MAX
[0504] 00E0          MINZ   EQU  >E0               MIN
[0505] 00E1          RPTZZ  EQU  >E1               RPT$
[0506]               *      EQU  >E2               unused
[0507]               *      EQU  >E2               unused
[0508]               *      EQU  >E3               unused
[0509]               *      EQU  >E4               unused
[0510]               *      EQU  >E5               unused
[0511]               *      EQU  >E6               unused
[0512]               *      EQU  >E7               unused
[0513] 00E8          NUMERZ EQU  >E8               NUMERIC

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0009 
EQUATES EXEC-359
[0514] 00E9          DIGITZ EQU  >E9               DIGIT
[0515] 00EA          UALPHZ EQU  >EA               UALPHA
[0516] 00EB          SIZEZ  EQU  >EB               SIZE
[0517] 00EC          ALLZ   EQU  >EC               ALL
[0518] 00ED          USINGZ EQU  >ED               USING
[0519] 00EE          BEEPZ  EQU  >EE               BEEP
[0520] 00EF          ERASEZ EQU  >EF               ERASE
[0521] 00F0          ATZ    EQU  >F0               AT
[0522] 00F1          BASEZ  EQU  >F1               BASE
[0523]               *      EQU  >F2               spare token (TEMPORARY)
[0524] 00F3          VARIAZ EQU  >F3               VARIABLE
[0525] 00F4          RELATZ EQU  >F4               RELATIVE
[0526] 00F5          INTERZ EQU  >F5               INTERNAL
[0527] 00F6          SEQUEZ EQU  >F6               SEQUENTIAL
[0528] 00F7          OUTPUZ EQU  >F7               OUTPUT
[0529] 00F8          UPDATZ EQU  >F8               UPDATE
[0530] 00F9          APPENZ EQU  >F9               APPEND
[0531] 00FA          FIXEDZ EQU  >FA               FIXED
[0532] 00FB          PERMAZ EQU  >FB               PERMANENT
[0533] 00FC          TABZ   EQU  >FC               TAB
[0534] 00FD          NUMBEZ EQU  >FD               #
[0535] 00FE          VALIDZ EQU  >FE               VALIDATE
[0536]               *      EQU  >FF               ILLEGAL VALUE
[0537]               *****************************************************
[0538]               ***********************************************************
[0539]               * NOTE: FILES EXECSD, SUBS AND PART OF PSCANS ARE IN GROM 5
[0540]               *       AS BELOW:
[0541]               *-------NAME------------------ADDRESS---------BYTES LEFT---
[0542]               *      EXECS                  >A000 - >AD92        5
[0543]               *      SUBS                   >AD98 - >B4DC        2
[0544]               *      PSCANS                 >B4E0 - >B7FA        5
[0545]               *
[0546]               * Some of the error calls at the end of EXECS file are
[0547]               * shared and directly addressed by SUBS file. Any change in
[0548]               * EXECS file which affects the address of error calls will
[0549]               * affect error reference in SUBS file. Make sure to edit
[0550]               * SUBS file in that situation.
[0551]               ***********************************************************
[0552] A000 0F,75           XML  CONT              XML CONT used by subprogram
[0553] A002 43,FB           BR   LITS05            Build FAC entry and GETSTR
[0554] A004 40,9C           BR   EXEC              Execute a program
[0555] A006 48,D3           BR   LINE
[0556] A008 48,6E           BR   DATAST
[0557] A00A 48,8A           BR   ASC
[0558] A00C 40,A9           BR   EXEC1
[0559] A00E 41,2B           BR   EXEC6D            Save information on a break
[0560] A010 48,0A           BR   DELINK            Delink symbol table entry
[0561] A012 48,E5           BR   CONV1
[0562] A014 49,FC           BR   SQUISH            Called in error routine in PS
[0563] A016 45,71           BR   VALCD
[0564] A018 42,8D           BR   INTRND
[0565] A01A 40,1A           BR   $
[0566] A01C 4B,1A    GA01C  BR   LNKRTN            Routine to go back to XB prog
[0567] A01E 49,89    GA01E  BR   SPCOL             Clear breakpoint in line # ro
[0568] A020 46,FC           BR   UBSUB             Spare
[0569] A022 40,22           BR   $
[0570] A024 40,24           BR   $         ***     Please let me know it you add
[0571]               *                     ***     branches here since it will a
[0572]               *                     ***     the address of link list. Sum
[0573] A026 A0,30    LINK1  DATA LINK2
[0574] A028 05,53,4F        STRI 'SOUND'           SOUND
       A02B 55,4E,44
[0575] A02E AA,3E           DATA XSOUND
[0576] A030 A0,3A    LINK2  DATA LINK3

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0010 
EQUATES EXEC-359
[0577] A032 05,43,4C        STRI 'CLEAR'           CLEAR
       A035 45,41,52
[0578] A038 AA,18           DATA CLEAR
[0579] A03A A0,44    LINK3  DATA LINK4
[0580] A03C 05,43,4F        STRI 'COLOR'           COLOR
       A03F 4C,4F,52
[0581] A042 A9,1D           DATA COLOR
[0582] A044 A0,4E    LINK4  DATA LINK5
[0583] A046 05,47,43        STRI 'GCHAR'           GCHAR 
       A049 48,41,52
[0584] A04C A8,FA           DATA GCHAR
[0585] A04E A0,58    LINK5  DATA LINK6
[0586] A050 05,48,43        STRI 'HCHAR'           HCHAR
       A053 48,41,52
[0587] A056 AB,03           DATA HCHAR
[0588] A058 A0,62    LINK6  DATA LINK7
[0589] A05A 05,56,43        STRI 'VCHAR'           VCHAR 
       A05D 48,41,52
[0590] A060 AB,26           DATA VCHAR
[0591] A062 A0,6B    LINK7  DATA LINKA
[0592] A064 04,43,48        STRI 'CHAR'            CHAR 
       A067 41,52
[0593] A069 AB,46           DATA CHARLY
[0594] A06B A0,73    LINKA  DATA LINKB
[0595] A06D 03,4B,45        STRI 'KEY'             KEY
       A070 59
[0596] A071 BC,FD           DATA ZKEY
[0597] A073 A0,7D    LINKB  DATA LINKC
[0598] A075 05,4A,4F        STRI 'JOYST'           JOYST
       A078 59,53,54
[0599] A07B BE,15           DATA ZJOYST
[0600] A07D A0,88    LINKC  DATA LINKD
[0601] A07F 06,53,43        STRI 'SCREEN'          KEY
       A082 52,45,45
       A085 4E
[0602] A086 AC,C9           DATA BORDER
[0603] A088 A0,94    LINKD  DATA LINKE
[0604] A08A 07,56,45        STRI 'VERSION'         VERSION
       A08D 52,53,49
       A090 4F,4E
[0605] A092 AA,1F           DATA VERS
[0606] A094 AE,00    LINKE  DATA LINKS1
[0607] A096 03,45,52        STRI 'ERR'             ERR
       A099 52
[0608] A09A AC,F9           DATA ERRWXY
[0609]               ***********************************************************
[0610]               *        START EXECUTION OF A PROGRAM OR STATEMENT
[0611]               * DATA:
[0612]               *      RAM(START) points into line number table at the
[0613]               *      first line to execute
[0614]               *      @PGMFLG contains >FF if executing a program or zero
[0615]               *      if imperative statement
[0616]               ***********************************************************
[0617] A09C 8E,44    EXEC   CZ   @PRGFLG           If program
[0618] A09E 60,AE           BS   GA0AE
[0619] A0A0 BD,2E,A3        DST  V@START,@EXTRAM   Line to start execution at
       A0A3 72
[0620] A0A4 95,2E           DINCT @EXTRAM          Pointer to text pointer
[0621] A0A6 06,A2,8D        CALL INTRND            Initialize random number
[0622] A0A9 BE,7F,03 EXEC1  ST   X2,@XPT           Initialize screen display
[0623] A0AC 40,B2           BR   GA0B2
[0624] A0AE BF,2C,08 GA0AE  DST  CRNBUF,@PGMPTR    Executing out of crunch buffe
       A0B1 20
[0625] A0B2 BF,26,A0 GA0B2  DST  EXEC20,@RTNG      Address of return from ALC

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0011 
EQUATES EXEC-359
       A0B5 BC
[0626] A0B6 BF,28,A1        DST  NUDTB,@NUDTAB     NUD table address for ALC
       A0B9 47
[0627] A0BA 0F,76           XML  EXECG             Execute XB
[0628] A0BC 8A,23    EXEC20 CASE @ERRCOD+1         Check type of return
[0629] A0BE 40,DF           BR   EXECND            0 - NORMAL END
[0630] A0C0 41,1A           BR   EXECBK            1 - BREAKPOINT
[0631] A0C2 40,ED           BR   EXECTR            2 - TRACE
[0632] A0C4 48,AB           BR   ERORZ             3 - ERROR
[0633] A0C6 40,D4           BR   WARNGZ            4 - WARNING
[0634] A0C8 41,DA           BR   ONERR             5 - ON ERROR
[0635] A0CA 47,17           BR   UDF               6 - FUNCTION
[0636] A0CC 42,18           BR   ONBRK             7 - ON BREAK
[0637] A0CE 44,38           BR   CONCAT            8 - CONCATENATE STRINGS "&"
[0638] A0D0 41,AA           BR   ONWARN            9 - ON WARNING
[0639] A0D2 42,2F           BR   GPLCAL            A - CALL STATEMENT
[0640] A0D4 C6,73,B0 WARNGZ CH   >B0,@SUBSTK
[0641] A0D7 6D,CA           BS   ERRSO
[0642]               * Stack overflow
[0643]               *                    ALLOW ROOM ON STACK FOR WARNING CALLS
[0644] A0D9 06,6A,82 WRNN01 CALL WARNZZ        ONLY WARNING MSG FROM XB SUPPORT
[0645] A0DC 02              BYTE 2       *         NUMERIC OVERFLOW
[0646] A0DD 41,16           BR   CLRRTN            Clear ERRCOD and return
[0647]               *                    NORMAL END OF EXECUTION
[0648] A0DF 8E,44    EXECND CZ   @PRGFLG           If imperative mode
[0649] A0E1 40,E9           BR   ERRRDY
[0650] A0E3 06,60,1C        CALL CHRTAB            Load the default character se
[0651] A0E6 05,63,DD        B    TOPL15            Return to top-level
[0652] A0E9 06,6A,84 ERRRDY CALL ERRZZ             Display * READY *
[0653] A0EC 00              BYTE 0
[0654]               * TRACE-MODE turned on - display line number
[0655] A0ED 86,20    EXECTR CLR  @VARW             Clear upper address byte
[0656] A0EF BC,21,7F        ST   @XPT,@VARW+1      Get current x-pointer
[0657] A0F2 A3,20,02        DADD NLNADD-3,@VARW    Make a valid screen address
       A0F5 DF
[0658] A0F6 C7,20,02        DCH  NLNADD+22,@VARW   If might go off screen
       A0F9 F8
[0659] A0FA 41,02           BR   GA102
[0660] A0FC 0F,83           XML  SCROLL            SCROLL to next line
[0661] A0FE BF,20,02        DST  NLNADD,@VARW      Re-initialize screen address
       A101 E2
[0662] A102 BE,B0,20 GA102  ST   LESS+OFFSET,V*VARW Display open bracket "("
       A105 9C
[0663] A106 91,20           DINC @VARW             Increment screen address
[0664] A108 06,A8,8A        CALL ASC               Convert line # into ASCII
[0665] A10B BE,B0,20        ST   GREAT+OFFSET,V*VARW Display close bracket ")"
       A10E 9E
[0666] A10F A7,20,02        DSUB NLNADD-4,@VARW    Update the x-pointer
       A112 DE
[0667] A113 BC,7F,21        ST   @VARW+1,@XPT
[0668] A116 87,22    CLRRTN DCLR @ERRCOD           Clear the return vector
[0669] A118 0F,82           XML  RTNB              Return to ALC
[0670]               * BREAKPOINT OR BREAK-KEY RECIEVED
[0671] A11A 8E,44    EXECBK CZ   @PRGFLG           If break or program
[0672] A11C 61,43           BS   ERRBRK
[0673] A11E BD,52,2E        DST  @EXTRAM,@FAC8     @FAC8 : Source addr in ERAM
[0674] A121 97,52           DDECT @FAC8            Point to the line #
[0675] A123 06,A7,0C        CALL UBSUB1            Reset the breakpoint
[0676] A126 03              SCAN                   Get break key out of queue
[0677] A127 BD,A3,82 EXEC6C DST  @PGMPTR,V@SPGMPT  Save text pointer
       A12A 2C
[0678] A12B BD,A3,86 EXEC6D DST  @EXTRAM,V@SEXTRM  Save line number table pointe
       A12E 2E
[0679] A12F BD,A3,88        DST  @VSPTR,V@SAVEVP   Save value stack pointer

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0012 
EQUATES EXEC-359
       A132 6E
[0680] A133 BD,A3,84        DST  @BUFLEV,V@SBUFLV  Save crunch buffer level
       A136 46
[0681] A137 BD,A3,96        DST  @LSUBP,V@SLSUBP   Save last subprogram on stack
       A13A 48
[0682] A13B BC,A3,98        ST   @FLAG,V@SFLAG     Save FLAG for continue
       A13E 45
[0683] A13F B2,A3,98        AND  >63,V@SFLAG       Only warning and break bits
       A142 63
[0684] A143 06,6A,84 ERRBRK CALL ERRZZ             * BREAKPOINT
[0685] A146 01              BYTE 1
[0686]               ***********************************************************
[0687]               *               NUD / STATEMENT BRANCH TABLE
[0688]               ***********************************************************
[0689] A147 41,89    NUDTB  BR   RECX              'RECORD'              0
[0690] A149 46,8B           BR   NBREAK            'BREAK'               0
[0691] A14B 46,9D           BR   NUNBRK            'UNBREAK'             0
[0692] A14D 46,81           BR   NTRACE            'TRACE'               0
[0693] A14F 46,86           BR   NUNTRC            'UNTRACE'             0
[0694] A151 41,8C           BR   NREADX            'READ'                0
[0695] A153 41,8F           BR   PRINTX            'PRINT'               0
[0696] A155 41,86           BR   SZRUNX            'RUN'                 0
[0697] A157 41,A7           BR   LINPUX            Reserved for LINPUT   1
[0698] A159 41,92           BR   RESTOX            'RESTORE'             1
[0699] A15B 43,7F           BR   NRNDMZ            'RANDOMIZE'           1
[0700] A15D 41,95           BR   INPUTX            'INPUT'               1
[0701] A15F 41,98           BR   OPENX             'OPEN'                1
[0702] A161 41,9B           BR   CLOSEX            'CLOSE'               1
[0703] A163 42,48           BR   NPI               'PI'                  1
[0704] A165 42,58           BR   NMAX              'MAX'                 1
[0705] A167 42,65           BR   NMIN              'MIN'                 2
[0706] A169 46,28           BR   RPTZ01            'RPT$'                2
[0707] A16B 41,9E           BR   ACCEPX            'ACCEPT'              2
[0708] A16D 41,83           BR   EOFX              'EOF'                 2
[0709] A16F 45,1A           BR   ASC01             'ASC'                 2
[0710] A171 45,BD           BR   POS01             'POS'                 2
[0711] A173 45,55           BR   VAL01             'VAL'                 2
[0712] A175 45,2B           BR   STRZ01            'STR$'                2
[0713] A177 44,90           BR   SEGZ01            'SEG$'                3
[0714] A179 41,A4           BR   DELETX            'DELETE'              3
[0715] A17B 41,A1           BR   DISPLX            'DISPLAY'             3
[0716] A17D 44,F3           BR   LEN01             'LEN'                 3
[0717] A17F 44,FF           BR   CHRZ01            'CHR$'                3
[0718]               *RXB PATCH CODE FOR BASIC RND REPLACEMENT ***********
[0719] A181 42,AF           BR   NRND              'RND'                 3      
[0720]               * The following are long branches to another GROM
[0721] A183 05,80,1C EOFX   B    EOF
[0722] A186 05,60,1E SZRUNX B    SZRUN
[0723] A189 05,80,22 RECX   B    REC
[0724] A18C 05,80,0E NREADX B    NREAD
[0725] A18F 05,80,04 PRINTX B    PRINT
[0726] A192 05,80,0C RESTOX B    RESTOR
[0727] A195 05,80,06 INPUTX B    INPUT
[0728] A198 05,80,08 OPENX  B    OPEN
[0729] A19B 05,80,0A CLOSEX B    CLOSE
[0730] A19E 05,80,1E ACCEPX B    ACCEPT
[0731] A1A1 05,80,00 DISPLX B    DISPL1
[0732] A1A4 05,80,02 DELETX B    DELET
[0733] A1A7 05,80,30 LINPUX B    LINPUT
[0734]               ***********************************************************
[0735]               * FLAGS USED IN EXECUTION MODE:    this needs to be checked
[0736]               *  @FLAG   BIT   RESET               SET
[0737]               *           0
[0738]               *           1    Warning PRINT       PRINT off

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0013 
EQUATES EXEC-359
[0739]               *           2    Warning NEXT        STOP
[0740]               *           3    Not in UDF          Executing a UDF
[0741]               *           4    TRACE mode          Normal mode
[0742]               *           5
[0743]               *           6    BREAK allowed       BREAK not allowed
[0744]               *           7    No LST/EDT protect  LIST/EDIT protected
[0745]               ***********************************************************
[0746]               * ON WARNING {NEXT | STOP | PRINT}
[0747]               * ON WARNING NEXT  - Causes warning messages to be ignored
[0748]               *                    and execution to continue as if a
[0749]               *                    warning never occurred
[0750]               * ON WARNING STOP  - Causes a warning to be treated as an
[0751]               *                    error - i.e. the message is displayed
[0752]               *                    and execution is halted
[0753]               * ON WARNING PRINT - Causes the default warning handling to
[0754]               *                    be in effect, i.e. any warning
[0755]               *                    messages are printed and execution
[0756]               *                    continues
[0757]               ***********************************************************
[0758] A1AA 0F,79    ONWARN XML  PGMCHR            GET OPTION
[0759] A1AC D6,42,9C        CEQ  PRINTZ,@CHAT      If print
[0760] A1AF 41,B7           BR   GA1B7
[0761] A1B1 B2,45,F9        AND  >F9,@FLAG         Turn on print and contiue
[0762] A1B4 05,A1,CF        B    ONWRN5
[0763] A1B7 D6,42,98 GA1B7  CEQ  STOPZ,@CHAT
[0764] A1BA 41,C4           BR   GA1C4
[0765] A1BC B2,45,FD        AND  >FD,@FLAG         Turn on print
[0766] A1BF B6,45,04        OR   >04,@FLAG         Turn on stop
[0767] A1C2 41,CF           BR   ONWRN5
[0768] A1C4 D6,42,96 GA1C4  CEQ  NEXTZ,@CHAT       * SYNTAX ERROR
[0769] A1C7 4D,BA           BR   ERRSYN
[0770] A1C9 B6,45,02        OR   >02,@FLAG         Turn off print
[0771] A1CC B2,45,FB        AND  >FB,@FLAG         Turn off stop
[0772] A1CF 0F,79    ONWRN5 XML  PGMCHR            Check for EOS
[0773] A1D1 06,6A,78 ONWRN7 CALL CHKEND            Error if not EOS
[0774] A1D4 4D,BA           BR   ERRSYN            If not EOS
[0775] A1D6 87,22           DCLR @ERRCOD
[0776] A1D8 0F,75           XML  CONT              Continue
[0777]               ***********************************************************
[0778]               * ON ERROR {line number | STOP}
[0779]               * ON ERROR line number - causes the error routine to build
[0780]               *                        an error stack entry and pass
[0781]               *                        control to the line specified in
[0782]               *                        the most-recently executed
[0783]               *                        on-error-statement
[0784]               * ON ERROR STOP - causes the default error handling
[0785]               *                 conditions to be in effect. i.e. any
[0786]               *                 errors that occur cause execution to halt
[0787]               *                 an a message to be displayed
[0788]               ***********************************************************
[0789] A1DA 0F,79    ONERR  XML  PGMCHR            Get option
[0790] A1DC D6,42,C9        CEQ  LNZ,@CHAT         If line # then find the line
[0791] A1DF 42,0E           BR   GA20E
[0792] A1E1 0F,79           XML  PGMCHR            Get upper byte
[0793] A1E3 BC,4A,42        ST   @CHAT,@FAC
[0794] A1E6 0F,79           XML  PGMCHR            Get lower byte
[0795] A1E8 BC,4B,42        ST   @CHAT,@FAC1
[0796] A1EB BD,4C,32        DST  @ENLN,@FAC2
[0797] A1EE A7,4C,00        DSUB 3,@FAC2           Pointing to 1st line #
       A1F1 03
[0798]               * Consider both ERAM and RAM cases to get line # from the
[0799]               * line number table. Also reset the break bit.
[0800] A1F2 06,80,2E ONERR2 CALL GRSUB3            Get 2 bytes from either RAM/E
[0801] A1F5 4C              BYTE FAC2            * FAC2 has the address

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0014 
EQUATES EXEC-359
[0802] A1F6 D5,4A,58        DCEQ @EEE1,@FAC        If found
[0803] A1F9 62,06           BS   ONERR4
[0804] A1FB C5,4C,30        DCH  @STLN,@FAC2       Not found
[0805] A1FE 4D,E6           BR   ERRLNF
[0806] A200 A7,4C,00        DSUB 4,@FAC2           Goto next line
       A203 04
[0807] A204 41,F2           BR   ONERR2
[0808] A206 95,4C    ONERR4 DINCT @FAC2
[0809] A208 BD,A3,8A        DST  @FAC2,V@ERRLN
       A20B 4C
[0810] A20C 42,16           BR   GA216
[0811] A20E D6,42,98 GA20E  CEQ  STOPZ,@CHAT       * SYNTAX ERROR
[0812] A211 4D,BA           BR   ERRSYN
[0813] A213 87,A3,8A        DCLR V@ERRLN           Back to default error handlin
[0814] A216 41,CF    GA216  BR   ONWRN5            Finish up same as ON WARNING
[0815]               ***********************************************************
[0816]               * ON BREAK {NEXT | STOP}
[0817]               * ON BREAK NEXT - Causes any breakpoints which have been
[0818]               *                 set on statements to be ignored when the
[0819]               *                 statement is encountered and also masks
[0820]               *                 the shift-C key so that it is ignored
[0821]               * ON BREAK STOP - Causes the default break handling to be
[0822]               *                 in force., i.e. execution is halted and
[0823]               *                 the BREAKPOINT message is displayed on
[0824]               *                 the screen
[0825]               ***********************************************************
[0826] A218 0F,79    ONBRK  XML  PGMCHR            Get next char to find option
[0827] A21A D6,42,98        CEQ  STOPZ,@CHAT       If stop option specified
[0828] A21D 42,25           BR   GA225
[0829] A21F B2,45,BF        AND  >BF,@FLAG         break allowed
[0830] A222 05,A2,2D        B    GA22D             Don't change this to BR GA22D
[0831] A225 D6,42,96 GA225  CEQ  NEXTZ,@CHAT       If next option number
[0832] A228 4D,BA           BR   ERRSYN            specified then syntax error
[0833] A22A B6,45,40        OR   >40,@FLAG         If next option specified then
[0834]               *                              break NOT allowed
[0835] A22D 41,CF    GA22D  BR   ONWRN5            Finish up same as ON WARNING
[0836]               ***********************************************************
[0837]               * GPLCAL - If a call is made to a subprogram that does not
[0838]               *  not exist either in the BASIC program itself or in the
[0839]               *  internal GPL subprogram list then one final attempt is
[0840]               *  made to find the subprogram at execution time by
[0841]               *  searching for the subprogram in the console or a
[0842]               *  peripheral. If not found there, then a
[0843]               *  *SUBPROGRAM NOT FOUND error occurs
[0844]               *
[0845]               *  Input: the subprogram name is in the FAC and the length
[0846]               *         of the name is in FAC15
[0847]               ***********************************************************
[0848] A22F 8E,80,89 GPLCAL CZ   @RAMFLG           Can't try if CPU program
[0849] A232 4D,F6           BR   ERRSNF
[0850] A234 E7,59,00        DSRL 8,@FAC15          Make name length a double
       A237 08
[0851] A238 A5,2C,59        DSUB @FAC15,@PGMPTR    Point back at name
[0852] A23B 93,2C           DDEC @PGMPTR           Point at name length
[0853] A23D BD,56,2C        DST  @PGMPTR,@FAC12    Set pointer to name
[0854] A240 06,00,10        CALL LINK              Issue 'Call Program Link'
[0855] A243 0A              BYTE 10              * Search subprogram lists
[0856] A244 41,D1           BR   ONWRN7            If all ok, check-end and rtn
[0857] A246 4D,F6           BR   ERRSNF            If not found, error
[0858]               ***********************************************************
[0859]               *                     NUD FOR PI
[0860]               ***********************************************************
[0861] A248 31,00,08 NPI    MOVE 8,G@CONPI,@FAC    Load constant PI
       A24B 4A,A2,50

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0015 
EQUATES EXEC-359
[0862] A24E 0F,75           XML  CONT
[0863] A250 40,03,0E CONPI  BYTE >40,3,14,15,92,65,35,90
       A253 0F,5C,41
       A256 23,5A
[0864]               * 3.1415992653590E+00
[0865]               ***********************************************************
[0866]               *                     NUD FOR MAX
[0867]               ***********************************************************
[0868] A258 06,A2,6D NMAX   CALL MAXMIN            Combine MAX and MIN
[0869] A25B 0A              GT
[0870] A25C 42,63           BR   GA263
[0871] A25E 35,00,08 NMAXZ1 MOVE 8,@ARG,@FAC
       A261 4A,5C
[0872] A263 0F,75    GA263  XML  CONT
[0873]               ***********************************************************
[0874]               *                     NUD FOR MIN
[0875]               ***********************************************************
[0876] A265 06,A2,6D NMIN   CALL MAXMIN            Combine MAX and MIN again
[0877] A268 0A              GT
[0878] A269 42,5E           BR   NMAXZ1
[0879] A26B 0F,75           XML  CONT
[0880]               ***********************************************************
[0881]               *                COMMON MAX / MIN ROUTINE
[0882]               ***********************************************************
[0883] A26D 06,AC,89 MAXMIN CALL LPAR              Skip "(" parse, and insure ,
[0884] A270 C6,4C,63        CH   >63,@FAC2         Must be numeric
[0885] A273 6D,BE           BS   ERRSNM
[0886] A275 0F,77           XML  VPUSH             Push l.h. arg on stack
[0887] A277 0F,74           XML  PARSE             PARSE up to ")"
[0888] A279 B6              BYTE RPARZ
[0889] A27A C6,4C,63        CH   >63,@FAC2         Must be numeric
[0890] A27D 6D,BE           BS   ERRSNM
[0891] A27F 0F,7E           XML  SPEED             Must be
[0892] A281 00              BYTE SYNCHK        *    at a
[0893] A282 B6              BYTE RPARZ         *      right parenthesis
[0894] A283 35,00,08        MOVE 8,@FAC,@ARG       Save in ARG for compare
       A286 5C,4A
[0895] A288 0F,78           XML  VPOP              Get l.h. arg back
[0896] A28A 0F,0A           XML  FCOMP             Compare operands
[0897] A28C 00              RTN
[0898]               * Initialize random number generator 
[0899] A28D 31,00,0A INTRND MOVE 10,G@X2SEED,V@RNDX2
       A290 A3,A0,A2
       A293 95
[0900] A294 00              RTN
[0901] A295 42,03,23 X2SEED BYTE >42,>03,>23,>15,>00 * =   33521, X2 INITIAL VAL
       A298 15,00
[0902] A29A 43,02,3E X1SEED BYTE >43,>02,>3E,>2A,>17 * = 2624223, X1 INITIAL VAL
       A29D 2A,17
[0903]               ***********************************************************
[0904]               *                                                         *
[0905]               * RXB PATCH REPLACEMENT CODE FOR RND WITH TI BASIC RND    *
[0906]               *                                                         *
[0907]               ***********************************************************
[0908]               *           PSEUDO-RANDOM NUMBER GENERATOR
[0909]               *      X(N+1) = (A*X(N)+C) MOD M;  RND = X/M
[0910]               *    WHERE:                 X = X2 * 1E7 + X1
[0911]               *                           A = A2 * 1E7 + A1
[0912]               *                           C = C2 * 1E7 + C1
[0913]               *                           M = 1E14
[0914]               * ASSUMPTIONS:
[0915]               *  (1) All numbers are integers; fractional parts are
[0916]               *      truncated
[0917]               *  (2) If the variables listed below start in the ranges

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0016 
EQUATES EXEC-359
[0918]               *     specified. They will also end in the ranges specified
[0919]               *
[0920]               * CONSTANTS: 0 <= A2 < 5E6 ; 0 <= C2 < 1E7
[0921]               *            0 <= A1 < 5E6 ; 0 <= C1 < 1E7
[0922]               * VARIABLES: 0 <= X2 < 1E7 ; 0 <= T1 <= 1E14 ; 0 <= T2 < 1E
[0923]               *            0 <= X1 < 1E7 ; 0 <= T3 <= 1E14 ; 0 <= T4 < 1E
[0924]               *
[0925]               *        STACK USAGE:
[0926]               *            CONSTANT REFS      CONTANT REFS    CONTANT REF
[0927]               * +---------+      IN/OUT            IN/OUT          IN/OUT
[0928]               * | STACK+4 | X2*A1(F)(H)       --    ----      --    ----
[0929]               * +---------+
[0930]               * | STACK+3 |   T2 (C)(J)       --    ----      --    ----
[0931]               * +---------+
[0932]               * | STACK+2 |   T1 (B)(D)   new X1   (E)(N)     --    ----
[0933]               * +---------+
[0934]               * | STACK+1 |old X1(A)(G)       T3   (K)(L) new X2   (M)(P)
[0935]               * +---------+
[0936]               ***********************************************************
[0937]               * COMPUTE NEW VALUE FOR X1, SAVE IT IN V@RNDX1
[0938]               *                             STACK
[0939]               *                               SREFS   FAC CONTENTS
[0940]               * NRND   MOVE 5,V@RNDX1,@FAC        FAC = X1
[0941]               *        MOVE 5,V@RNDX1,@FAC        fAC = X1
[0942]               *        CLR  @FAC5                 FAC = CLR
[0943]               *        DCLR @FAC6                 FAC = CLR
[0944]               *        XML  VPUSH          (A)    FAC = X1
[0945]               *        MOVE 8,G@RNDA1,@ARG        ARG = A1
[0946]               *        XML  FMUL                  FAC = X1*A1
[0947]               *        MOVE 8,G@RNDC1,@ARG        ARG = C1
[0948]               *        XML  FADD               T1=FAC = X1*A1+C1
[0949]               *        XML  VPUSH          (B)    FAC = T1
[0950]               *        MOVE 8,G@RNDEM,@ARG        ARG = 1/1E7
[0951]               *        XML  FMUL                  FAC = T1/1E7
[0952]               *        CALL GRINT              T2=FAC = INT(T1/1E7)
[0953]               *        XML  VPUSH          (C)    FAC = T2
[0954]               *        MOVE 8,G@RNDEP,@ARG        ARG = 1E7
[0955]               *        XML  FMUL                  FAC = T2*1E7
[0956]               *        DSUB 8,@VSPTR
[0957]               *        XML  SSUB           (D) X1=FAC = T1-T2*1E7
[0958]               *        MOVE 5,@FAC,V@RNDX1        FAC = X1 (new)
[0959]               *        XML  VPUSH          (E)    FAC = X1
[0960]               * COMPUTE NEW VALUE FOR X2, SAVE IT IN V@RNDX2
[0961]               *        MOVE 5,V@RNDX2,@FAC        FAC = X2
[0962]               *        CLR  @FAC5                 FAC = CLR
[0963]               *        DCLR @FAC6                 FAC = CLR
[0964]               *        MOVE 8,G@RNDA1,@ARG        ARG = A1
[0965]               *        XML  FMUL                  FAC = X2*A1
[0966]               *        DADD 8,@VSPTR
[0967]               *        XML  VPUSH          (F)    FAC = X2*A1
[0968]               *        DSUB 24,@VSPTR
[0969]               *        XML  VPOP           (G)    FAC = X1
[0970]               *        DADD 32,@VSPTR
[0971]               *        MOVE 8,G@RNDA2,@ARG        ARG = A2
[0972]               *        XML  FMUL                  FAC = X1*A2
[0973]               *        XML  SADD           (H)    FAC = X2*A1+X1*A2
[0974]               *        MOVE 8,G@RNDC2,@ARG        ARG = C2
[0975]               *        XML  FADD                  FAC = X2*A1+X1*A2
[0976]               *        XML  SADD           (J) T3=FAC = X2*A1+X1*A2
[0977]               *        DSUB 16,@VSPTR
[0978]               *        XML  VPUSH          (K)    FAC = T3
[0979]               *        MOVE 8,G@RNDEM,@ARG        ARG = 1/1E7
[0980]               *        XML  FMUL                  FAC = T3/1E7
[0981]               *        CALL GRINT              T4=FAC = INT(T3/1E7)

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0017 
EQUATES EXEC-359
[0982]               *        MOVE 8,G@RNDEP,@ARG        ARG = 1E7
[0983]               *        XML  FMUL                  FAC = T4*1E7
[0984]               *        XML  SSUB           (L) X2=FAC = T3-T4*1E7
[0985]               *        MOVE 5,@FAC,V@RNDX2        FAC = X2 (new)
[0986]               * COMPUTE NEW VALUE FOR RND, LEAVE IT IN FAC
[0987]               *        MOVE 8,G@RNDEM,@ARG        ARG = 1/1E7
[0988]               *        XML  FMUL                  FAC = X2/1E7
[0989]               *       XML  VPUSH          (M)    FAC = X2/1E7
[0990]               *        DADD 8,@VSPTR
[0991]               *        XML  VPOP           (N)    FAC = X1
[0992]               *        XML  FMUL                  FAC = X1/1E7
[0993]               *        XML  FMUL                  FAC = X1/1E14
[0994]               *        XML  SADD           (P)RND=FAC = (X2/1E7)+(X1/1E14
[0995]               *        XML  CONT
[0996]               ***********************************************************
[0997]               * CONSTANTS FOR THE RANDOM NUMBER ROUTINE
[0998]               * RNDA2  BYTE >43,>01,>2B,>59,>52,>00,>00,>00 * = 1438982
[0999]               * RNDA1  BYTE >42,>2A,>08,>15,>00,>00,>00,>00 * = 0420821
[1000]               * RNDC2  BYTE >43,>02,>0B,>20,>30,>00,>00,>00 * = 2113248
[1001]               * RNDC1  BYTE >43,>06,>36,>05,>13,>00,>00,>00 * = 6540519
[1002] A29F 43,0A,00 RNDEP  BYTE >43,>0A,>00,>00,>00,>00,>00,>00 * = 1E7
       A2A2 00,00,00
       A2A5 00,00
[1003] A2A7 3C,0A,00 RNDEM  BYTE >3C,>0A,>00,>00,>00,>00,>00,>00 * = 1/1E7
       A2AA 00,00,00
       A2AD 00,00
[1004]               ***********************************************************
[1005]               * RXB BASIC RND REPLACEMENT FROM TI BASIC
[1006] A2AF BE,4A,3F NRND   ST   >3F,@FAC       * Exponent    
[1007] A2B2 BE,10,4B        ST   >4B,@VAR5      * Loop counter
[1008] A2B5 02,63    NRND1  RAND >63            * 0?
[1009] A2B7 8E,78           CZ   @RANDOM        * No, go on
[1010] A2B9 42,C5           BR   NRND3     
[1011] A2BB 92,4A           DEC  @FAC           * 0?
[1012] A2BD 8E,4A           CZ   @FAC           * End with 0
[1013] A2BF 62,D2           BS   NRND4          * Go on
[1014] A2C1 42,B5           BR   NRND1
[1015] A2C3 02,63    NRND2  RAND >63            * Till 100
[1016] A2C5 BC,90,10 NRND3  ST   @RANDOM,*VAR5  * All digits
       A2C8 78
[1017] A2C9 D6,10,51        CEQ  >51,@VAR5      * Till >8351
[1018] A2CC 62,D4           BS   NRND5 
[1019] A2CE 90,10           INC  @VAR5          * Increase loop counter
[1020] A2D0 42,C3           BR   NRND2 
[1021] A2D2 86,4B    NRND4  CLR  @FAC1          * Set 0
[1022] A2D4 0F,75    NRND5  XML  CONT
[1023]               ***********************************************************
[1024] A2D6 0F,79    STRFCH XML  PGMCHR
[1025] A2D8 0F,74           XML  PARSE
[1026] A2DA B6              BYTE RPARZ
[1027] A2DB 00              RTN
[1028] A2DC 06,A2,D6 STRGET CALL STRFCH
[1029] A2DF D6,4C,65        CEQ  >65,@FAC2
[1030] A2E2 4D,BE           BR   ERRSNM      * STRING NUM MISMATCH
[1031] A2E4 00              RTN
[1032] A2E5 06,A2,D6 NUMFCH CALL STRFCH
[1033] A2E8 D6,4C,65        CEQ  >65,@FAC2
[1034] A2EB 6D,BE           BS   ERRSNM      * STRING NUM MISMATCH
[1035] A2ED 00              RTN
[1036] A2EE 0F,12    CFIFCH XML  CFI
[1037] A2F0 D6,54,03        CEQ  >03,@FAC+10
[1038] A2F3 6D,EE           BS   ERRBV       * NUMERIC OVERFLOW
[1039] A2F5 00              RTN
[1040] A2F6 06,A3,6D GETNUM CALL SUBLP3

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0018 
EQUATES EXEC-359
[1041] A2F9 D6,42,B3        CEQ  >B3,@CHAT
[1042] A2FC 4D,BA           BR   ERRSYN
[1043] A2FE 00              RTN
[1044] A2FF 06,A2,F6 ROWCOL CALL GETNUM
[1045] A302 CF,4A,00        DCGT 24,@FAC
       A305 18
[1046] A306 6D,EE           BS   ERRBV
[1047] A308 93,4A           DDEC @FAC
[1048] A30A BC,02,7F        ST   @XPT,@MNUM
[1049] A30D BC,7E,4B        ST   @FAC1,@YPT
[1050] A310 06,A2,F6        CALL GETNUM
[1051] A313 CF,4A,00        DCGT 32,@FAC
       A316 20
[1052] A317 6D,EE           BS   ERRBV
[1053] A319 93,4A           DDEC @FAC
[1054] A31B BC,7F,4B        ST   @FAC1,@XPT
[1055] A31E 00              RTN
[1056] A31F 0F,79    NGOOD  XML  PGMCHR
[1057] A321 CA,42,80 NGOOD1 CHE  >80,@CHAT
[1058] A324 6D,BA           BS   ERRSYN         * ?
[1059] A326 06,A3,3A        CALL SNDER
[1060] A329 D6,4C,65        CEQ  >65,@FAC2
[1061] A32C 4D,BE           BR   ERRSNM         * STRING NUMBER MISMATCH
[1062] A32E BF,4A,00        DST  >001C,@FAC
       A331 1C
[1063] A332 BD,4E,1C        DST  @SREF,@FAC4
[1064] A335 BD,50,0C        DST  @BYTES,@FAC6
[1065] A338 43,43           BR   SNDASS
[1066] A33A 0F,7A    SNDER  XML  SYM
[1067] A33C 0F,7B           XML  SMB
[1068] A33E 0F,77           XML  VPUSH
[1069] A340 00              RTN
[1070] A341 0F,80    CIFSND XML  CIF
[1071] A343 0F,7C    SNDASS XML  ASSGNV
[1072] A345 00              RTN
[1073] A346 BC,00,7D GETLP  ST   @CB,@VAR0
[1074] A349 BC,01,7D        ST   @CB,@VARV
[1075] A34C A6,01,60        SUB  OFFSET,@VARV
[1076] A34F BC,E0,00        ST   @VARV,V@0(@STRPTR)
       A352 12,01
[1077] A354 91,12           DINC @STRPTR
[1078] A356 00              RTN
[1079] A357 BC,00,E0 PUTLP  ST   V@0(@FAC4),@VAR0
       A35A 00,4E
[1080] A35C A2,00,60        ADD  OFFSET,@VAR0
[1081] A35F 91,4E           DINC @FAC4
[1082] A361 00              RTN
[1083] A362 08       HFMT   FMT
[1084] A363 E0,00           DATA >E000
[1085] A365 FB              FEND
[1086] A366 00              RTN
[1087] A367 08       VFMT   FMT
[1088] A368 E0,00           DATA >E000
[1089] A36A 9E              BYTE >9E
[1090] A36B FB              FEND
[1091] A36C 00              RTN
[1092] A36D 06,A2,E5 SUBLP3 CALL NUMFCH
[1093] A370 06,A2,EE        CALL CFIFCH
[1094] A373 00              RTN
[1095] A374 86,4A    CLRFAC CLR  @FAC
[1096] A376 35,00,07        MOVE 7,@FAC,@FAC1
       A379 4B,4A
[1097] A37B 00              RTN
[1098]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0019 
EQUATES EXEC-359
[1099]               *
[1100]               * RXB PATCH CODE TO RESET ADDRESS FOR NRNDMZ **************
[1101] A37C 05,A3,7F        B    NRNDMZ
[1102]               ***********************************************************
[1103]               *                   RANDOMIZE STATEMENT
[1104]               ***********************************************************
[1105] A37F 06,6A,78 NRNDMZ CALL CHKEND            Seed provider?
[1106] A382 63,C0           BS   RNDM1             No
[1107]               * RANDOMIZE given a see value
[1108]               * (99,000,000,000,001 possible starting positions)
[1109]               * (Place-value is ignored in the input number)
[1110] A384 0F,74           XML  PARSE             Parse the seed
[1111] A386 83              BYTE TREMZ           * Up to end of statement
[1112] A387 06,A3,ED        CALL CKSTNM
[1113] A38A 8F,4A           DCZ  @FAC              Check FAC for zero
[1114] A38C 63,B6           BS   GA3B6
[1115] A38E BE,4A,46        ST   >46,@FAC          0 < FAC < 1E14
[1116] A391 0F,77           XML  VPUSH             Let FAC = X2*1E7+X1
[1117] A393 31,00,08        MOVE 8,G@RNDEM,@ARG        ARG = 1/1E7
       A396 5C,A2,A7
[1118] A399 0F,08           XML  FMUL                  FAC = X2+X1/1E7
[1119] A39B 06,00,22        CALL GRINT                 FAC = X2
[1120] A39E 35,00,05        MOVE 5,@FAC,V@RNDX2        FAC = X2
       A3A1 A3,A0,4A
[1121] A3A4 31,00,08        MOVE 8,G@RNDEP,@ARG        ARG = 1E7
       A3A7 5C,A2,9F
[1122] A3AA 0F,08           XML  FMUL                  FAC = X2*1E7
[1123] A3AC 0F,0C           XML  SSUB                  FAC = X1
[1124] A3AE 35,00,05        MOVE 5,@FAC,V@RNDX1        FAC = X1
       A3B1 A3,A5,4A
[1125] A3B4 0F,75           XML  CONT                  FAC = X1
[1126] A3B6 BD,A3,A0 GA3B6  DST  @FAC,V@RNDX2          FAC = 0
       A3B9 4A
[1127] A3BA BD,A3,A5        DST  @FAC,V@RNDX1          FAC = 0
       A3BD 4A
[1128] A3BE 0F,75           XML  CONT
[1129]               * RANDOMIZE given number seed value (use GPL RAND function)
[1130]               * (16K possible starting positions)
[1131] A3C0 BF,4A,42 RNDM1  DST  >4201,@FAC            FAC = >4201
       A3C3 01
[1132] A3C4 86,4E           CLR  @FAC4                 FAC4= >00
[1133] A3C6 06,A3,D2        CALL RNDMZ
[1134] A3C9 03,A5           DATA RNDX1
[1135] A3CB 06,A3,D2        CALL RNDMZ             Set up seed
[1136] A3CE 03,A0           DATA RNDX2
[1137] A3D0 0F,75           XML  CONT              Continue on
[1138] A3D2 88,52    RNDMZ  FETCH @FAC8            Fetch address of seed (high b
[1139] A3D4 88,53           FETCH @FAC9            Fetch address of seed (low by
[1140] A3D6 02,63           RAND 99                GPL Randomize
[1141] A3D8 BC,4C,78        ST   @RANDOM,@FAC2     >00<=FAC+2<=FF
[1142] A3DB E6,4C,02        SRL  2,@FAC2           >00<=FAC+2<=3F
[1143] A3DE 02,63           RAND 99                GPL Randomize
[1144] A3E0 BC,4D,78        ST   @RANDOM,@FAC3     >00<=FAC+3<=FF
[1145] A3E3 E6,4D,02        SRL  2,@FAC3           >00<=FAC+3<=3F
[1146] A3E6 35,00,05        MOVE 5,@FAC,V*FAC8     Put in seed
       A3E9 B0,52,4A
[1147] A3EC 00              RTN
[1148] A3ED D6,4C,65 CKSTNM CEQ  >65,@FAC2
[1149] A3F0 6D,BE           BS   ERRSNM
[1150] A3F2 00              RTN
[1151] A3F3 40,01,00 FLT1   BYTE >40,>01,>00,>00,>00,>00,>00,>00
       A3F6 00,00,00
       A3F9 00,00
[1152]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0020 
EQUATES EXEC-359
[1153]               *                 EXTENDED STRING PACKAGE
[1154]               * THE ROUTINES ARE:
[1155]               *  LITS05 - Move a string literal from the program to the
[1156]               *            string space
[1157]               *  INTARG - Checks that an argument is a numeric and
[1158]               *            converts it from floating point to an integer
[1159]               *  PUSSTR - Checks that an argument is a string and pushes
[1160]               *            it on the stack
[1161]               *  CONCAT - Concatenates 2 strings together
[1162]               *  SEG$   - Segments a string
[1163]               *  LEN    - Puts the length of a string in the FAC
[1164]               *  CHR$   - Converts an integer into its ASCII character
[1165]               *  STR$   - Converts a number into its string equivalent
[1166]               *  VAL    - Converts a string into its numeric equivalent
[1167]               *  POS    - Gives the position of one string within another
[1168]               *  RPT$   - Generates a single string with multiple copies
[1169]               *            of the original string
[1170]               *
[1171]               *      AN ENTRY IN THE FAC LOOKS LIKE:
[1172]               * +------------+-----+----+-------------+-----------------+
[1173]               * |addr of ptr | >65 | xx | addr of str | length of str   |
[1174]               * +------------+-----+----+-------------+-----------------+
[1175]               *     FAC       FAC2  FAC3   FAC4           FAC6
[1176]               ***********************************************************
[1177]               * Support routine for functions to build FAC entry
[1178] A3FB 86,50    LITS05 CLR  @FAC6             Need as a double-byte value
[1179] A3FD BD,0C,50        DST  @FAC6,@BYTES      LENGTH FOR GETSTR
[1180] A400 BC,52,80        ST   @RAMTOP,@FAC8     Copy ERAM flag for later
       A403 84
[1181] A404 0F,71    LITS07 XML  GETSTR            ALLOCATE STRING SPACE
[1182] A406 BF,4A,00 LITS08 DST  >001C,@FAC        SAVE ADDR OF STRING  (SREF)
       A409 1C
[1183] A40A BD,4E,1C        DST  @SREF,@FAC4       SAVE ADDR OF STRING
[1184] A40D BF,4C,65        DST  >6500,@FAC2       INDICATES A STRING CONSTANT
       A410 00
[1185]               *********** COPY STRING INTO STRING SPACE *****************
[1186] A411 8F,0C    LITS09 DCZ  @BYTES            If non-null string
[1187] A413 64,2B           BS   GA42B
[1188] A415 8E,52           CZ   @FAC8
[1189] A417 44,20           BR   GA420
[1190] A419 34,0C,B0        MOVE @BYTES,V*TEMP5,V*SREF
       A41C 1C,B0,66
[1191] A41F 00              RTN
[1192]               *                             Else source string in ERAM
[1193] A420 BD,56,0C GA420  DST  @BYTES,@FFF1      FFF1 : BYTE COUNT
[1194] A423 BD,58,1C        DST  @SREF,@EEE1       EEE1 : DESTINATION ADDR ON VD
[1195] A426 BD,54,66        DST  @TEMP5,@DDD1      DDD1 : Source addr in ERAM
[1196] A429 0F,8B           XML  GVWITE            Move data from ERAM to VDP
[1197] A42B 00       GA42B  RTN
[1198] A42C 86,52    LITS06 CLR  @FAC8             SET FLAG TO VDP
[1199] A42E 44,04           BR   LITS07            JUMP INTO CODE
[1200]               ***********************************************************
[1201]               * PUSSTR - Insures that the entry in the FAC is a string
[1202]               *           and pushes it onto the stack.
[1203]               ***********************************************************
[1204] A430 D6,4C,65 PUSSTR CEQ  >65,@FAC2
[1205] A433 4D,BE           BR   ERRSNM
[1206] A435 0F,77           XML  VPUSH             PUSH THE ARGUMENT
[1207] A437 00              RTN
[1208]               ***********************************************************
[1209]               * CONCAT - CONCATENATES TWO STRINGS TOGETHER
[1210]               *         INPUT  : FLOATING POINT ACCUMULATOR ENTRIES
[1211]               *         OUTPUT : CONCATENATED STRING AND (POSSIBLE)
[1212]               *                  ZEROED BACK-POINTERS FOR THE OLD STRINGS

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0021 
EQUATES EXEC-359
[1213]               *         USES   : TEMP2, TEMP4 AND TEMP5 AS TEMPORARIES
[1214]               ***********************************************************
[1215] A438 86,23    CONCAT CLR  @ERRCOD+1         CLEAR THE ERROR CODE
[1216] A43A 06,A4,30        CALL PUSSTR            Push the string & get next to
[1217] A43D 0F,74           XML  PARSE             GET THE R.H. ARGUMENT
[1218] A43F B8              BYTE CONCZ
[1219] A440 D6,4C,65        CEQ  >65,@FAC2         If not string - error
[1220] A443 4D,BE           BR   ERRSNM
[1221] A445 BD,0C,50        DST  @FAC6,@BYTES      GET R.H. LENGTH
[1222] A448 A1,0C,E0        DADD V@6(@VSPTR),@BYTES    ADD IN L.H. LENGTH
       A44B 06,6E
[1223] A44D C7,0C,00        DCH  255,@BYTES
       A450 FF
[1224] A451 44,5B           BR   GA45B
[1225] A453 BF,0C,00        DST  255,@BYTES        TRUNCATE IF TOO LONG
       A456 FF
[1226] A457 06,6A,82 WRNST1 CALL WARNZZ            Display warning
[1227] A45A 13              BYTE 19                * STRING TRUNCATED message
[1228] A45B BD,68,0C GA45B  DST  @BYTES,@TEMP6     Keep length for later
[1229] A45E 0F,77           XML  VPUSH
[1230] A460 0F,71           XML  GETSTR            Alloccate the result string
[1231] A462 0F,78           XML  VPOP              Retrieve R.H.
[1232] A464 35,00,08        MOVE 8,@FAC,@ARG
       A467 5C,4A
[1233] A469 0F,78           XML  VPOP              Retrieve L.H.
[1234] A46B BD,66,4E        DST  @FAC4,@TEMP5      Set ptr to L.H. ARG(for FREST
[1235] A46E BD,0C,50        DST  @FAC6,@BYTES      Length of L.H. ARG
[1236] A471 86,52           CLR  @FAC8             Force VDP mode
[1237] A473 06,A4,06        CALL LITS08            Set up FAC & copy L.H. ARG in
[1238] A476 8F,62           DCZ  @ARG6             If R.H. =0 don't copy
[1239] A478 64,8E           BS   CONC06
[1240] A47A BD,64,1C        DST  @SREF,@TEMP4      Get ptr to new string
[1241] A47D A1,64,50        DADD @FAC6,@TEMP4      Ptr to where 2nd string begin
[1242] A480 A5,68,50        DSUB @FAC6,@TEMP6      Length of 2nd string
[1243]               *                                      (possibly truncated)
[1244] A483 64,8E           BS   CONC06
[1245] A485 34,68,B0        MOVE @TEMP6,V*ARG4,V*TEMP4     Copy in 2nd string
       A488 64,B0,60
[1246]                
[1247] A48B A1,50,68        DADD @TEMP6,@FAC6      Add in length of 2nd ARG
[1248]               * NOTE: FAC6 already contained length of 1st ARG from the
[1249]               *       parse that was done on it
[1250] A48E 0F,75    CONC06 XML  CONT              Done.
[1251]               ***********************************************************
[1252]               * SEG$(A$,X,Y) - Extracts the desiginated string from A$.
[1253]               *     X specifies the character position within A$ at
[1254]               *     which the extraction begins. Y specifies the number
[1255]               *     of characters to extract.
[1256]               *     If X or Y is negative an error occurs. If X=0 an
[1257]               *     error occurs. If Y=0 or X > Y then a null string is
[1258]               *     is returned. If the ramaining length in A$ starting
[1259]               *     at the postion specified by X is less than the length
[1260]               *     specified by Y, then the remainder of A$ starting at
[1261]               *     position X is returned.
[1262]               *   INPUT - Control is turned over to SEG$ from PARSE. The
[1263]               *     only requirement is that a SEG$ was encountered.
[1264]               *   OUTPUT - The Floating Point Accumulator is set up with
[1265]               *     the header for the segmented string.
[1266]               *   USES - TEMP2 (Others in calls to GETSTR and LITS08)
[1267]               ***********************************************************
[1268] A490 06,AC,89 SEGZ01 CALL LPAR              Insure "(" parse and check ",
[1269] A493 06,A4,30        CALL PUSSTR            Push string and get next toke
[1270] A496 0F,7E           XML  SPEED             Get the position
[1271] A498 01              BYTE PARCOM       *     within the source string

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0022 
EQUATES EXEC-359
[1272] A499 06,A9,95        CALL INTARG            CHECK & CONVERT ARG TO INTEGE
[1273] A49C 8F,4A           DCZ  @FAC               CAN'T HAVE VALUE OF 0
[1274] A49E 6D,EE           BS   ERRBV
[1275] A4A0 0F,77           XML  VPUSH             PUSH THE ARG
[1276] A4A2 0F,74           XML  PARSE             Get extraction length
[1277] A4A4 B6              BYTE RPARZ
[1278] A4A5 0F,7E           XML  SPEED             Must have
[1279] A4A7 00              BYTE SYNCHK       *     ended on
[1280] A4A8 B6              BYTE RPARZ        *      a right parenthesis
[1281] A4A9 06,A9,95        CALL INTARG            CHECK & CONVERT ARG TO INTEGE
[1282] A4AC BD,5C,4A        DST  @FAC,@ARG         Move extraction length
[1283] A4AF 0F,78           XML  VPOP              Get position back
[1284] A4B1 BD,5E,4A        DST  @FAC,@ARG2        Move position
[1285] A4B4 0F,78           XML  VPOP              Retrieve source string
[1286] A4B6 BD,56,5E        DST  @ARG2,@TEMP2      Get position within string
[1287] A4B9 C5,56,50        DCH  @FAC6,@TEMP2      If position > length =>null
[1288] A4BC 64,EF           BS   SEGZ08
[1289] A4BE A1,56,5C        DADD @ARG,@TEMP2       Compute end of substring
[1290] A4C1 A5,56,50        DSUB @FAC6,@TEMP2      Compute length beyond end
[1291] A4C4 93,56           DDEC @TEMP2             string
[1292] A4C6 D3,56,00        DCGE 0,@TEMP2
       A4C9 00
[1293] A4CA 44,D4           BR   SEGZ06            Fine if substring is shorter
[1294] A4CC BD,5C,50        DST  @FAC6,@ARG        Else, truncate length of
[1295]               *                              substring
[1296] A4CF A5,5C,5E        DSUB @ARG2,@ARG        Subtract position from source
[1297]               *                              length
[1298] A4D2 91,5C           DINC @ARG              Increment to include last cha
[1299] A4D4 BD,0C,5C SEGZ06 DST  @ARG,@BYTES       # of bytes needed for substri
[1300] A4D7 0F,77           XML  VPUSH             Save source string entry
[1301] A4D9 0F,71           XML  GETSTR            ALLOCATE RESULT STRING
[1302] A4DB 0F,78           XML  VPOP              Restore source string entry
[1303] A4DD BD,66,4E        DST  @FAC4,@TEMP5      Pointer to source for FRESTR
[1304]               *                              LITS08
[1305] A4E0 A1,66,5E        DADD @ARG2,@TEMP5      Pointer to start of substring
[1306] A4E3 93,66           DDEC @TEMP5            Decrement since zero-based
[1307] A4E5 BD,50,0C        DST  @BYTES,@FAC6      Set length of string
[1308] A4E8 86,52           CLR  @FAC8             FORCE VDP MODE
[1309] A4EA 06,A4,06        CALL LITS08            Copy in & set up FAC
[1310] A4ED 0F,75           XML  CONT
[1311] A4EF 87,5C    SEGZ08 DCLR @ARG              Extract a null string
[1312] A4F1 44,D4           BR   SEGZ06            >>>JUMP ALWAYS<<<
[1313]               ***********************************************************
[1314]               * LEN(A$) - Calculate the length of a string and leave the
[1315]               *           result in the FAC.
[1316]               *  CONTROL - Turned over to NLEN from the parser.
[1317]               *  USES    - No temporaries.
[1318]               ***********************************************************
[1319] A4F3 06,A5,65 LEN01  CALL PARFF             Insure left parenthesis & par
[1320] A4F6 4D,BE           BR   ERRSNM             If not string value
[1321] A4F8 BD,4A,50        DST  @FAC6,@FAC        Length
[1322] A4FB 0F,80    LEN02  XML  CIF               Convert integer to floating p
[1323] A4FD 0F,75           XML  CONT
[1324]               ***********************************************************
[1325]               * CHR$(X) - Takes integer value X and converts the number
[1326]               *           into the ASCII representation for that number.
[1327]               *  CONTROL - Turned over to NCHR by the parser.
[1328]               *  OUTPUT  - FAC is set up with the string entry
[1329]               *  USES    - Uses temproraries when invoking LITS06(LITSTR)
[1330]               ***********************************************************
[1331] A4FF 06,A5,65 CHRZ01 CALL PARFF             Insure left parenthesis & par
[1332] A502 06,A9,95        CALL INTARG            Convert into integer
[1333] A505 BF,0C,00        DST  1,@BYTES          Create a length 1 string
       A508 01

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0023 
EQUATES EXEC-359
[1334] A509 BC,A3,78        ST   @FAC1,V@ONECHR    Move the value to VDP(for LIT
       A50C 4B
[1335] A50D BF,66,03        DST  ONECHR,@TEMP5     Address of character
       A510 78
[1336] A511 06,A4,2C        CALL LITS06            Create string and set up FAC
[1337] A514 BF,50,00        DST  1,@FAC6           Length of string
       A517 01
[1338] A518 0F,75           XML  CONT
[1339]               ***********************************************************
[1340]               * ASC(A$) - Takes the numeric value of the first character
[1341]               *           in A$.
[1342]               ***********************************************************
[1343] A51A 06,A5,65 ASC01  CALL PARFF             Insure left parenthesis & par
[1344] A51D 4D,BE           BR   ERRSNM             If not string
[1345] A51F 8E,51           CZ   @FAC7             Bad Argument?
[1346] A521 6D,EA           BS   ERRBA
[1347] A523 BC,4B,B0        ST   V*FAC4,@FAC1      Get the first character
       A526 4E
[1348] A527 86,4A           CLR  @FAC
[1349] A529 44,FB           BR   LEN02             USE COMMON CODE >>>JUMP ALWAY
[1350]               ***********************************************************
[1351]               * STR$(X) - Takes as its imput an integer X and converts it
[1352]               *           to its string representation.
[1353]               *  CONTROL - Turned over to STR$ by the parser.
[1354]               *  USES    - The usual temporaries used by string function
[1355]               *            when it calls LITS06. Uses the Roll-out area
[1356]               *            for a temporary storage area when allocating
[1357]               *            the result string.
[1358]               *  OUTPUT  - FAC is set up in the usual manner for a string
[1359]               ***********************************************************
[1360] A52B 06,A5,65 STRZ01 CALL PARFF             Insure left parenthesis & par
[1361] A52E 6D,BE           BS   ERRSNM             If not numeric-error
[1362] A530 86,55           CLR  @FAC11            Select XB floating type
[1363] A532 0F,73           XML  XCNS              Convert the number to string
[1364] A534 D6,90,55        CEQ  SPACE,*FAC11      If leading space
       A537 20
[1365] A538 45,3E           BR   GA53E
[1366] A53A 90,55           INC  @FAC11            Suppress it out
[1367] A53C 92,56           DEC  @FAC12            Shorten the length
[1368] A53E 86,0C    GA53E  CLR  @BYTES            Prepare for 2-byte value
[1369] A540 BC,0D,56        ST   @FAC12,@BYTES+1   Get length of string
[1370] A543 34,0C,A3        MOVE @BYTES,*FAC11,V@VROAZ    Put the string in VDP
       A546 C0,90,55
[1371] A549 BF,66,03        DST  VROAZ,@TEMP5      Copy-from address(for LITSTR)
       A54C C0
[1372] A54D 06,A4,2C        CALL LITS06            Allocate and set up FAC
[1373] A550 BD,50,0C        DST  @BYTES,@FAC6      Put in the length
[1374] A553 0F,75           XML  CONT
[1375]               ***********************************************************
[1376]               * VAL(A$) - Takes as its input a string, A$, and converts
[1377]               *           the string into a number if the string is a
[1378]               *           valid representation of a number.
[1379]               *  CONTROL - From the parser.
[1380]               *  OUTPUT  - FAC contains the floating point number.
[1381]               ***********************************************************
[1382] A555 06,A5,65 VAL01  CALL PARFF             Insure left parenthesis & par
[1383] A558 4D,BE           BR   ERRSNM             If not string - error
[1384] A55A 8E,51           CZ   @FAC7             Can't have null string
[1385] A55C 6D,EA           BS   ERRBA
[1386] A55E 06,A5,71        CALL VALCD             So bad argument error
[1387] A561 6D,EA           BS   ERRBA
[1388] A563 0F,75           XML  CONT
[1389]               * Short routine to parse a single argument enclosed in
[1390]               *  parenthesis for a function or a subprogram and set

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0024 
EQUATES EXEC-359
[1391]               *  condition based upon whether the value parsed was a
[1392]               *  string or a numeric.
[1393] A565 D6,42,B7 PARFF  CEQ  LPARZ,@CHAT
[1394] A568 4D,BA           BR   ERRSYN
[1395] A56A 0F,74           XML  PARSE
[1396] A56C FF              BYTE >FF               *
[1397] A56D D6,4C,65        CEQ  >65,@FAC2
[1398] A570 01              RTNC
[1399] A571 BD,66,4E VALCD  DST  @FAC4,@TEMP5      Pointer to string
[1400] A574 A1,66,50        DADD @FAC6,@TEMP5      Pointer to trailing length by
[1401] A577 BD,0C,50        DST  @FAC6,@BYTES      For suppressing trailing blan
[1402] A57A 91,0C           DINC @BYTES            Prepare for undue subtraction
[1403] A57C 93,66    GA57C  DDEC @TEMP5            Keep track of end of string
[1404] A57E 93,0C           DDEC @BYTES            Decrease length of string
[1405] A580 65,B9           BS   RTNSET            End up with empty string,
[1406] A582 D6,B0,66        CEQ  SPACE,V*TEMP5     Wild trailing blanks
       A585 20
[1407] A586 65,7C           BS   GA57C
[1408] A588 91,0C           DINC @BYTES            Allow for terminator
[1409] A58A 0F,77           XML  VPUSH             Save the ptr to the string
[1410] A58C 0F,71           XML  GETSTR            Get a new string
[1411] A58E 0F,78           XML  VPOP              Retrieve the ptr to the strin
[1412] A590 BD,66,4E        DST  @FAC4,@TEMP5      Get the ptr to the string
[1413] A593 86,52           CLR  @FAC8             Force VDP mode
[1414] A595 06,A4,11        CALL LITS09            Copy the string and set up FA
[1415] A598 A1,0C,1C        DADD @SREF,@BYTES      Point to the trailing length
[1416] A59B 93,0C           DDEC @BYTES            Point at the last character
[1417] A59D BE,B0,0C        ST   SPACE,V*BYTES     Put in the terminator
       A5A0 20
[1418] A5A1 BD,56,1C        DST  @SREF,@FAC12      Address for the conversion
[1419] A5A4 D6,B0,56 GA5A4  CEQ  SPACE,V*FAC12     While leading spaces
       A5A7 20
[1420] A5A8 45,AE           BR   GA5AE
[1421] A5AA 91,56           DINC @FAC12            Skip leading blank
[1422] A5AC 45,A4           BR   GA5A4
[1423] A5AE 86,4C    GA5AE  CLR  @FAC2             Get rid of string (in case=0)
[1424] A5B0 86,54           CLR  @FAC10            Assume no error
[1425] A5B2 0F,10           XML  CSNUM             Convert it
[1426] A5B4 D5,56,0C        DCEQ @BYTES,@FAC12     Convert all of it?
[1427] A5B7 68,F1           BS   WRNNO             Yes, check overflow & return
[1428] A5B9 D4,00,00 RTNSET CEQ  @VAR0,@VAR0       No, return with condition set
[1429] A5BC 01              RTNC
[1430]               ***********************************************************
[1431]               * POS(A$,B$,X) - Attempts to match the string, B$, in A$
[1432]               *    beginning at character # X in A$. If X is > LEN(A$), a
[1433]               *    match is not found or A$ is the null string then the
[1434]               *    returned value is 0. If B$ is the null string then the
[1435]               *    returned value is 1. Otherwise, the returned value is
[1436]               *    the column # of the 1st character matched in A$
[1437]               *  CONTROL - Fromn the parser. Returned through common code
[1438]               *            IN LEN.
[1439]               *  USES    - Not temporaries - Utilizes FAC and ARG.
[1440]               ***********************************************************
[1441] A5BD 06,AC,89 POS01  CALL LPAR              Insure "(", parse , insure ",
[1442] A5C0 06,A4,30        CALL PUSSTR            STACK THE STRING AND GET TOKE
[1443] A5C3 0F,7E           XML  SPEED             Parse the match string and
[1444] A5C5 01              BYTE PARCOM      *      insure end on comma
[1445] A5C6 06,A4,30        CALL PUSSTR            STACK THE STRING AND GET TOKE
[1446] A5C9 0F,74           XML  PARSE             Get position
[1447] A5CB B6              BYTE RPARZ
[1448] A5CC 0F,7E           XML  SPEED             Must have
[1449] A5CE 00              BYTE SYNCHK          *  ended on a
[1450] A5CF B6              BYTE RPARZ           *   right parenthesis
[1451] A5D0 06,A9,95        CALL INTARG            Check and convert it

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0025 
EQUATES EXEC-359
[1452] A5D3 8F,4A           DCZ  @FAC              Value out of range
[1453] A5D5 6D,EE           BS   ERRBV
[1454] A5D7 BD,0C,4A        DST  @FAC,@BYTES       Keep the offset
[1455] A5DA 93,0C           DDEC @BYTES            Correct for position 0
[1456] A5DC 0F,78           XML  VPOP              Get match string back
[1457] A5DE 35,00,08        MOVE 8,@FAC,@ARG       Put match in ARG
       A5E1 5C,4A
[1458] A5E3 0F,78           XML  VPOP              Get source back
[1459] A5E5 8E,51           CZ   @FAC7             If source null
[1460] A5E7 66,24           BS   POS12
[1461] A5E9 C4,51,0D        CH   @BYTES+1,@FAC7    OFFSET > LENGTH?
[1462] A5EC 46,24           BR   POS12             Yes, no match possible
[1463] A5EE 8E,63           CZ   @ARG7             If null string
[1464] A5F0 66,15           BS   POS06
[1465] A5F2 A1,4E,0C        DADD @BYTES,@FAC4      Adjust ptr for offset
[1466] A5F5 A4,51,0D        SUB  @BYTES+1,@FAC7    Adjust length
[1467] A5F8 C8,51,63 POS02  CHE  @ARG7,@FAC7       Enough space left for a match
[1468] A5FB 46,24           BR   POS12             No, no match possible
[1469] A5FD BD,4A,4E        DST  @FAC4,@FAC        Get first ARG
[1470] A600 BD,5C,60        DST  @ARG4,@ARG        Get second ARG
[1471] A603 BC,64,63        ST   @ARG7,@ARG8       And length of second
[1472] A606 D4,B0,5C POS04  CEQ  V*FAC,V*ARG       Compare the characters
       A609 B0,4A
[1473] A60B 46,1C           BR   POS10             Didn't match
[1474] A60D 91,4A           DINC @FAC              Next in source
[1475] A60F 91,5C           DINC @ARG              Next in match
[1476] A611 92,64           DEC  @ARG8             Reached end of match?
[1477] A613 46,06           BR   POS04             Not yet, so loop
[1478] A615 90,0D    POS06  INC  @BYTES+1          Matched! Correct for 1 index
[1479] A617 BD,4A,0C POS08  DST  @BYTES,@FAC       Character position of match
[1480] A61A 44,FB           BR   LEN02             Convert to floating point
[1481]               * NOTE: Utilizes the LEN code to do the conversion and
[1482]               *       finish up.
[1483] A61C 90,0D    POS10  INC  @BYTES+1          Step index of match character
[1484] A61E 92,51           DEC  @FAC7             Move 1 position down 1st
[1485] A620 91,4E           DINC @FAC4              Argument
[1486] A622 45,F8           BR   POS02             Try to match again
[1487]               * JUMP ALWAYS
[1488] A624 86,0D    POS12  CLR  @BYTES+1          NO MATCH POSSIBLE
[1489] A626 46,17           BR   POS08
[1490]               ***********************************************************
[1491]               * RPT$(A$,X) - Creates a string consisting of X copies of
[1492]               *              A$. If X is negative or non-numeric, an
[1493]               *              exception occurs. If A$ is not a string, an
[1494]               *              exception occurs.
[1495]               ***********************************************************
[1496] A628 06,AC,89 RPTZ01 CALL LPAR              Insure "(", parse, insure ","
[1497] A62B 06,A4,30        CALL PUSSTR            Insure a string and push it
[1498] A62E 0F,74           XML  PARSE             Parse second argument
[1499] A630 B6              BYTE RPARZ
[1500] A631 0F,7E           XML  SPEED             Must have
[1501] A633 00              BYTE SYNCHK       *     ended on a
[1502] A634 B6              BYTE RPARZ        *      right parenthesis
[1503] A635 06,A9,95        CALL INTARG            Check numeric and convert
[1504] A638 A9,4A,E0        DMUL V@6(@VSPTR),@FAC  Compute result length
       A63B 06,6E
[1505] A63D 8F,4B           DCZ  @FAC1
[1506] A63F 66,49           BS   GA649
[1507] A641 06,6A,82 WRNST2 CALL WARNZZ            Give truncation message
[1508] A644 13              BYTE 19                * STRING TRUNCATED message
[1509] A645 BF,4C,00        DST  255,@FAC2         Make it a maximum string
       A648 FF
[1510] A649 BD,0C,4C GA649  DST  @FAC2,@BYTES      Copy requested string length
[1511] A64C 0F,71           XML  GETSTR            Get the new string

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0026 
EQUATES EXEC-359
[1512] A64E 0F,78           XML  VPOP              Retrieve the original string
[1513]               * At this point BYTES should still contain the length
[1514] A650 BD,5C,50        DST  @FAC6,@ARG        Copy original length in ARG
[1515] A653 8F,0C           DCZ  @BYTES            Zero copies requested
[1516] A655 46,59           BR   GA659
[1517] A657 87,5C           DCLR @ARG              So we copy zero!!!!!!!
[1518] A659 C1,0C,5C GA659  DEX  @ARG,@BYTES       Original length to BYTE
[1519] A65C BD,66,4E        DST  @FAC4,@TEMP5      And also original start addr
[1520] A65F 86,52           CLR  @FAC8             Clear flag for LITS08
[1521] A661 06,A4,06        CALL LITS08            Create FAC and copy on copy
[1522]               * ARG contains total length now.
[1523] A664 BD,50,5C        DST  @ARG,@FAC6        Store new length
[1524] A667 A5,5C,0C RPTZ02 DSUB @BYTES,@ARG       Subtract one copy
[1525] A66A 8F,5C           DCZ  @ARG              <<<<<THE WAY OUT
[1526] A66C 66,84           BS   XMLCON
[1527] A66E A1,1C,0C        DADD @BYTES,@SREF      Compute new start address
[1528] A671 C5,0C,5C        DCH  @ARG,@BYTES
[1529] A674 46,79           BR   GA679
[1530] A676 BD,0C,5C        DST  @ARG,@BYTES       Truncate string
[1531] A679 34,0C,B0 GA679  MOVE @BYTES,V*TEMP5,V*SREF
       A67C 1C,B0,66
[1532] A67F 46,67           BR   RPTZ02
[1533]               **********************************************************
[1534]               ***********************************************************
[1535]               *                   TRACE STATEMENT
[1536]               ***********************************************************
[1537] A681 B6,45,10 NTRACE OR   >10,@FLAG         Set the trace bit
[1538] A684 0F,75    XMLCON XML  CONT              Continue on
[1539]               ***********************************************************
[1540]               *                 UNTRACE STATEMENT
[1541]               ***********************************************************
[1542] A686 B2,45,EF NUNTRC AND  >EF,@FLAG         Reset the trace bit
[1543] A689 0F,75           XML  CONT              Continue on
[1544]               ***********************************************************
[1545]               *          BREAK AND UNBREAK STATEMENTS
[1546]               ***********************************************************
[1547] A68B BE,5C,FF NBREAK ST   >FF,@ARG          BREAK flag
[1548] A68E 06,6A,78        CALL CHKEND            Check for end of statement
[1549] A691 46,A4           BR   LINEGP            If not goto LINEGP
[1550] A693 93,2C           DDEC @PGMPTR           Back up so CON will rescan en
[1551] A695 8E,44           CZ   @PRGFLG           Rative without line #
[1552] A697 41,27           BR   EXEC6C
[1553] A699 06,6A,84 ERROLP CALL ERRZZ             Only legal in a program
[1554] A69C 1B              BYTE 27
[1555] A69D 86,5C    NUNBRK CLR  @ARG              UNBREAK flag for common
[1556] A69F 06,6A,78        CALL CHKEND            Check for end of statement
[1557] A6A2 66,F7           BS   UNBK01            If end then goto UNBK01
[1558] A6A4 06,A8,D3 LINEGP CALL LINE              Get line #
[1559] A6A7 BD,5E,32        DST  @ENLN,@ARG2
[1560] A6AA A7,5E,00        DSUB >03,@ARG2         1st line #
       A6AD 03
[1561] A6AE C9,5E,30 LNGP1  DCHE @STLN,@ARG2       If line not found
[1562] A6B1 46,F1           BR   WRNLNF
[1563] A6B3 06,80,2E        CALL GRSUB3            Read line # of data from ERAM
[1564] A6B6 5E              BYTE >5E           *   (use GREAD1) or VDP
[1565]               * @ARG2: Source addr in ERAM/VDP, reset possible breakpoint
[1566] A6B7 D5,58,4A        DCEQ @FAC,@EEE1        If line found
[1567] A6BA 66,C2           BS   LNGP2
[1568] A6BC A7,5E,00        DSUB 4,@ARG2           Next line in VDP or ERAM
       A6BF 04
[1569] A6C0 46,AE           BR   LNGP1
[1570]               * JUMP ALWAYS
[1571] A6C2 8E,80,84 LNGP2  CZ   @RAMTOP           If ERAM exists
[1572] A6C5 66,DA           BS   GA6DA

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0027 
EQUATES EXEC-359
[1573] A6C7 B2,58,7F        AND  >7F,@EEE1         Assume UNBREAK flag
[1574] A6CA 8E,5C           CZ   @ARG              If BREAK flag
[1575] A6CC 66,D1           BS   GA6D1
[1576] A6CE B6,58,80        OR   >80,@EEE1         Set the breakpoint
[1577] A6D1 06,60,36 GA6D1  CALL GWSUB             Write a few bytes of data to
[1578]               *                              ERAM (use GWRITE)
[1579] A6D4 5E,58,01        BYTE >5E,>58,>01     * ARG2,EEE1,1
[1580]               *                            @ARG2: Destination addr on ERA
[1581]               *                            @EEE1: Data
[1582]               *                            1    : Byte count
[1583] A6D7 05,A6,E6        B    LNGP2B
[1584] A6DA B2,B0,5E GA6DA  AND  >7F,V*ARG2        Assume UNBREAK flag first
       A6DD 7F
[1585] A6DE 8E,5C           CZ   @ARG              If BREAK flag
[1586] A6E0 66,E6           BS   LNGP2B
[1587] A6E2 B6,B0,5E        OR   >80,V*ARG2        Set the breakpoint
       A6E5 80
[1588] A6E6 06,6A,78 LNGP2B CALL CHKEND            Check for end of statement
[1589] A6E9 66,FA           BS   LNGP4             If end then continue
[1590] A6EB 0F,7E           XML  SPEED             Must be
[1591] A6ED 00              BYTE SYNCHK         *     at a
[1592] A6EE B3              BYTE COMMAZ         *       comma now
[1593] A6EF 46,A4           BR   LINEGP
[1594]               * JUMP ALWAYS
[1595] A6F1 06,6A,82 WRNLNF CALL WARNZZ            Note: warning not error
[1596] A6F4 26              BYTE 38             *  'LINE NOT FOUND'
[1597] A6F5 46,E6           BR   LNGP2B            And contiue on
[1598]               * JUMP ALWAYS
[1599] A6F7 06,A6,FC UNBK01 CALL UBSUB             Clear all bkpt in line # tabl
[1600] A6FA 0F,75    LNGP4  XML  CONT              Contiue
[1601]               *     CLEAR ALL BREAKPOINTS
[1602] A6FC BD,52,30 UBSUB  DST  @STLN,@FAC8       END OF LINE # BUFFER
[1603] A6FF 06,A7,0C GA6FF  CALL UBSUB1            Reset one line # at a time
[1604] A702 A3,52,00        DADD 4,@FAC8           Got to the next line
       A705 04
[1605] A706 C5,52,32        DCH  @ENLN,@FAC8       End of table
[1606] A709 46,FF           BR   GA6FF
[1607] A70B 00              RTN
[1608] A70C 06,80,2E UBSUB1 CALL GRSUB3            Read the line # from ERAM/VDP
[1609]               *                             Reset possible bkpt too
[1610] A70F 52              BYTE >52            *  @FAC8: Source addr on ERAM/VD
[1611] A710 06,60,36        CALL GWSUB             Write a few bytes of data to
[1612]               *                              ERAM(use GWRITE) or VDP
[1613] A713 52,58,01        BYTE >52,>58,>01    *  FAC8,EEE1,1
[1614]               *                          @FAC8: Destination adr in ERAM/V
[1615]               *                          @EEE1: Data
[1616]               *                          1    : Byte count
[1617] A716 00              RTN
[1618]               ***********************************************************
[1619]               *                USER DEFINED FUNCTIONS
[1620]               * Subroutine to store away the information of the tokens in
[1621]               * a function reference, go into the 'DEF' statement,
[1622]               * calculate the value of the expression and then resume
[1623]               * execution of the user's program after the reference.
[1624]               * An entry in the FAC and on the stack for a function
[1625]               * reference looks like:
[1626]               * +--------+-----+---------------------+--------+---------+
[1627]               * | PGMPTR | >68 | string/numeric flag | SYMTAB | FREPTR  |
[1628]               * +--------+-----+---------------------+--------+---------+
[1629]               *  FAC      FAC2  FAC3                  FAC4     FAC6
[1630]               *
[1631]               * The 'PGMPTR' is where execution resumes after evaluating
[1632]               * the function. String (80)/numeric(00) flag is function
[1633]               * type. SYMTAB is the old symbol table pointer and FREPTR

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0028 
EQUATES EXEC-359
[1634]               * is the old free space pointer. These are restored after
[1635]               * the function is evaluated.
[1636]               ***********************************************************
[1637] A717 8E,44    UDF    CZ   @PRGFLG           If imperative
[1638] A719 47,20           BR   GA720
[1639] A71B 8E,80,85        CZ   @RAMTOP+1         And ERAM, error
[1640] A71E 46,99           BR   ERROLP
[1641] A720 86,51    GA720  CLR  @FAC7             Assume no args
[1642] A722 87,22           DCLR @ERRCOD           Clear the error code for cont
[1643] A724 86,5E           CLR  @ARG2             Safety for VPUSH
[1644] A726 86,4C           CLR  @FAC2             Sagety for VPUSH
[1645] A728 D6,42,B7        CEQ  LPARZ,@CHAT
[1646] A72B 47,3B           BR   GA73B
[1647] A72D 0F,77           XML  VPUSH             Save ptr to function definiti
[1648] A72F 0F,74           XML  PARSE             PARSE to get arg value
[1649] A731 FF              BYTE >FF
[1650] A732 35,00,08        MOVE 8,@FAC,@ARG       Save PARSE result
       A735 5C,4A
[1651] A737 0F,78           XML  VPOP              Get S.T. ptr to function defi
[1652] A739 90,51           INC  @FAC7             Indicate theat we have an arg
[1653] A73B BC,66,51 GA73B  ST   @FAC7,@TEMP5      Move the parmeter count
[1654] A73E BD,64,4A        DST  @FAC,@TEMP4       S.T. ptr to definition
[1655] A741 0F,77           XML  VPUSH             Allow room for UDF result
[1656] A743 35,00,08        MOVE 8,@ARG,@FAC       Retrieve parse result
       A746 4A,5C
[1657] A748 0F,77           XML  VPUSH             Save parse result
[1658] A74A BC,4C,B0        ST   V*TEMP4,@FAC2     Get S.T. declarations
       A74D 64
[1659] A74E BC,4D,4C        ST   @FAC2,@FAC3       Do this to save string bit
[1660]               * NOTE: THIS IS TO ALLOW THE CHECKING AFTER THE FUNCTION HA
[1661]               *       BEEN EVALUATED TO MAKE SURE THE FUNCTION
[1662]               *       TYPE (STRING/NUMERIC) MATCHES THE RESULT IT PRODUCE
[1663] A751 B2,4C,07        AND  >07,@FAC2         Mask all but # of parameters
[1664] A754 D4,4C,66        CEQ  @TEMP5,@FAC2
[1665] A757 4D,F2           BR   ERRIAL
[1666]               * Incorrect argument list error above.
[1667] A759 BD,4A,2C        DST  @PGMPTR,@FAC      Will resume execution here
[1668] A75C BE,4C,70        ST   >70,@FAC2         Entering parameter into symbo
[1669]               *                    table while in UDF statement executing
[1670] A75F B2,4D,80        AND  >80,@FAC3         Mask all but string bit
[1671] A762 A7,6E,00        DSUB 16,@VSPTR         Get below parse result
       A765 10
[1672]                
[1673] A766 BD,4E,3E        DST  @SYMTAB,@FAC4     Save current symbol table ptr
[1674] A769 BD,50,40        DST  @FREPTR,@FAC6     Save current free space ptr
[1675] A76C 0F,77           XML  VPUSH             Save the return info
[1676] A76E A3,6E,00        DADD 8,@VSPTR          Get back to parse result
       A771 08
[1677]               *********** SHIFT EXECUTION TO FUNCTION DEFINITION ********
[1678] A772 BD,2C,E0        DST  V@6(@TEMP4),@PGMPTR    Set text ptr to definiti
       A775 06,64
[1679] A777 0F,79           XML  PGMCHR            Get 1st character in the defi
[1680] A779 C6,73,A4        CH   >A4,@SUBSTK       Stack overflow
[1681] A77C 6D,CA           BS   ERRSO
[1682] A77E 35,00,18        MOVE 24,@VAR0,V@VROAZ  Roll out temporaries
       A781 A3,C0,00
[1683] A784 B6,45,08        OR   >08,@FLAG         Set function flag for ENTER
[1684] A787 BE,16,80        ST   >80,@XFLAG        Make calls look like ENTERX
[1685] A78A D6,42,BE        CEQ  EQUALZ,@CHAT
[1686] A78D 47,9C           BR   GA79C
[1687]               * NOTE: This is to keep the global/local variables correct
[1688]               *       the event that a function uses another function in
[1689]               *       its evaluation.
[1690] A78F 86,59           CLR  @FAC15            Create a dummy entry in table

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0029 
EQUATES EXEC-359
[1691] A791 06,6A,80        CALL ENT09              for no-paremter function
[1692] A794 97,2C           DDECT @PGMPTR          Back up to equal sign
[1693] A796 86,E0,02        CLR  V@2(@VSPTR)       This is to keep ASSGNV(called
       A799 6E
[1694]               *                              below) not to screw up in
[1695]               *                              case FAC2 happens to have a
[1696]               *                              value (greater) >65
[1697] A79A 47,9F           BR   GA79F
[1698] A79C 06,6A,7E GA79C  CALL ENTER             Enter the parameter
[1699] A79F 0F,79    GA79F  XML  PGMCHR            Get the '=' (Checked in PSCAN
[1700] A7A1 B2,45,F7        AND  >F7,@FLAG         Reset to normal ENTERs
[1701] A7A4 35,00,18        MOVE 24,V@VROAZ,@>8300
       A7A7 00,A3,C0
[1702] A7AA BE,EF,FF        ST   >68,V@-6(@VSPTR)  Correct stack entry ID
       A7AD FA,6E,68
[1703] A7B0 BD,E0,02        DST  V@SYMBOL,V@2(@SYMTAB)  Fudge link to
       A7B3 3E,A3,76
[1704]               *                                   get global values
[1705] A7B6 BD,4A,3E        DST  @SYMTAB,@FAC      Set up for SMB
[1706] A7B9 0F,7B           XML  SMB               Get value space
[1707] A7BB 35,00,08        MOVE 8,@FAC,@FAC8      Destination
       A7BE 52,4A
[1708] A7C0 0F,78           XML  VPOP              Get arg back
[1709] A7C2 35,00,08        MOVE 8,@FAC,@ARG       Argument value
       A7C5 5C,4A
[1710] A7C7 35,00,08        MOVE 8,@FAC8,@FAC      Destination
       A7CA 4A,52
[1711] A7CC 0F,77           XML  VPUSH             Push to destination
[1712] A7CE 35,00,08        MOVE 8,@ARG,@FAC       Argument value
       A7D1 4A,5C
[1713] A7D3 D6,4C,65        CEQ  >65,@FAC2         If a string
[1714] A7D6 47,E2           BR   GA7E2
[1715] A7D8 D7,4A,00        DCEQ >001C,@FAC        If not temp
       A7DB 1C
[1716] A7DC 67,E2           BS   GA7E2
[1717] A7DE BD,4E,B0        DST  V*FAC,@FAC4       Get new location of string
       A7E1 4A
[1718]               *                             Parameter was allocated in S.
[1719] A7E2 0F,79    GA7E2  XML  PGMCHR            Skip the '='
[1720] A7E4 0F,7C           XML  ASSGNV            Assign the value to the param
[1721] A7E6 0F,74           XML  PARSE             PARSE to end of function defi
[1722] A7E8 83              BYTE TREMZ
[1723]               **** CHECK FOR TYPE MATCH (STRING/STRING OR NUM/NUM)*******
[1724]               **** BETWEEN THE RESULT AND THE FUNCTION TYPE *************
[1725] A7E9 D6,4C,65        CEQ  >65,@FAC2         If result string
[1726] A7EC 47,F6           BR   GA7F6
[1727] A7EE 8E,E0,03        CZ   V@3(@VSPTR)       If functional
       A7F1 6E
[1728] A7F2 6D,BE           BS   ERRSNM
[1729] A7F4 47,FC           BR   GA7FC              not a string
[1730] A7F6 8E,E0,03 GA7F6  CZ   V@3(@VSPTR)       If functional
       A7F9 6E
[1731] A7FA 4D,BE           BR   ERRSNM
[1732]               ***** NOW RESTORE SYMBOL TABLE AND RESUME *****************
[1733]               ***** EXECUTION AT THE ORIGINAL LINE **********************
[1734] A7FC 06,A8,0A GA7FC  CALL DELINK            Delink the parameter entry
[1735] A7FF BD,2C,E0        DST  V@8(@VSPTR),@PGMPTR Manual pop to get ptr back
       A802 08,6E
[1736] A804 93,2C           DDEC @PGMPTR           Back up text pointer
[1737] A806 0F,79           XML  PGMCHR            Get next token
[1738] A808 0F,75           XML  CONT
[1739] A80A BD,66,3E DELINK DST  @SYMTAB,@TEMP5    Save addr of S.T. entry just
[1740]               *                             in case entry is a string
[1741]               *                             (must free the string)

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0030 
EQUATES EXEC-359
[1742] A80D 35,00,04        MOVE 4,V@4(@VSPTR),@SYMTAB  Restore old symbol table
       A810 3E,E0,04
       A813 6E
[1743]               *                             pointer and free space pointe
[1744]               *                             This handles the freeing of t
[1745]               *                             string value which was assign
[1746]               *                             to the parameter.
[1747] A814 D2,B0,66        CGE  0,V*TEMP5         If string parmeter
       A817 00
[1748] A818 68,4C           BS   GA84C
[1749] A81A BD,66,E0        DST  V@6(@TEMP5),@TEMP5 Where the string is
       A81D 06,66
[1750] A81F 8F,66           DCZ  @TEMP5            If non-null string
[1751] A821 68,33           BS   GA833
[1752] A823 BD,56,EF        DST  V@-3(@TEMP5),@TEMP2 Get backpointer
       A826 FF,FD,66
[1753] A829 C9,56,3E        DCHE @SYMTAB,@TEMP2    If not used
[1754] A82C 68,33           BS   GA833
[1755] A82E 87,EF,FF        DCLR V@-3(@TEMP5)      Free up the string
       A831 FD,66
[1756]               * This handles the special case of F$(X$)=X$
[1757]               * The result, which was permanent, must be made a temp.
[1758] A833 D6,4C,65 GA833  CEQ  >65,@FAC2         If string result
[1759] A836 48,4A           BR   GA84A
[1760] A838 C9,4A,3E        DCHE @SYMTAB,@FAC      If came from argument
[1761] A83B 68,4A           BS   GA84A
[1762] A83D 8F,4E           DCZ  @FAC4             If non-null
[1763] A83F 68,46           BS   GA846
[1764] A841 87,EF,FF        DCLR V@-3(@FAC4)       Clear the backpointer
       A844 FD,4E
[1765] A846 BF,4A,00 GA846  DST  >001C,@FAC        Make it a temp
       A849 1C
[1766] A84A 48,56    GA84A  BR   GA856             If numeric parameter
[1767] A84C 8E,80,84 GA84C  CZ   @RAMTOP           If ERAM exist
[1768] A84F 68,56           BS   GA856
[1769] A851 A3,80,86        DADD 8,@RAMFRE         Remove 8 bytes of value
       A854 00,08
[1770] A856 A7,6E,00 GA856  DSUB 8,@VSPTR          Trash the stack entry
       A859 08
[1771] A85A 00              RTN                    And retrun
[1772] A85B 0F,74    ATTNUT XML  PARSE
[1773] A85D B6              BYTE RPARZ
[1774] A85E 06,A3,ED        CALL CKSTNM            CHECK FOR NUMERIC OR STRING
[1775] A861 0F,7E           XML  SPEED             Insure argument is in
[1776] A863 02              BYTE RANGE          *   range of 0-30
[1777] A864 00              BYTE 0
[1778] A865 00,1E           DATA 30
[1779] A867 E6,4B,01        SRL  1,@FAC1           0,1 : 0000        ATTENUATION
[1780]               *                             2,3 : 0001
[1781]               *                             4,5 : 0010
[1782]               *                             6,7 : 0011        ETC...
[1783] A86A B6,4B,F0        OR   >F0,@FAC1         REGISTER BITS
[1784] A86D 00              RTN
[1785]               ***********************************************************
[1786]               * SUBROUTINE TO SET POINTER TO EACH DATUM
[1787]               ***********************************************************
[1788] A86E 93,36    DATAST DDEC @LNBUF            Point to 1st byte of line ptr
[1789] A870 06,80,2C        CALL GRSUB2            Read 2 bytes from VDP or ERAM
[1790] A873 36              BYTE LNBUF           *  (use GREAD1), @LNBUF: Source
[1791]               *                           *  address in ERAM or VDP
[1792] A874 BD,34,58        DST  @EEE1,@DATA       Put it in @DATA
[1793] A877 06,80,20        CALL SRDATA            Look for 'DATA' on the line
[1794] A87A 48,89           BR   DATST1            OK, FOUND ANOTHER 'DATA' STMT
[1795] A87C 97,36           DDECT @LNBUF           NO

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0031 
EQUATES EXEC-359
[1796] A87E D5,36,30        DCEQ  @STLN,@LNBUF
[1797] A881 68,87           BS   GA887
[1798] A883 93,36           DDEC @LNBUF            Point to 1st token address
[1799] A885 48,6E           BR   DATAST
[1800] A887 86,34    GA887  CLR  @DATA             Indicate no data
[1801] A889 00       DATST1 RTN
[1802]               ***********************************************************
[1803]               * Subroutine to get line number and goto routine to display
[1804]               * it on the screen.
[1805]               ***********************************************************
[1806] A88A 8E,80,89 ASC    CZ   @RAMFLG
[1807] A88D 48,97           BR   GA897
[1808] A88F BD,5E,EF        DST  V@-2(@EXTRAM),@ARG2   Get line # in
       A892 FF,FE,2E
[1809] A895 48,A5           BR   GA8A5
[1810] A897 BF,56,00 GA897  DST  2,@FFF1           @FFF1 : Byte count
       A89A 02
[1811] A89B BD,54,2E        DST  @EXTRAM,@DDD1     @DDD1 : Source addr in ERAM
[1812] A89E 97,54           DDECT @DDD1
[1813] A8A0 0F,8C           XML  GREAD1            Read data from ERAM
[1814] A8A2 BD,5E,58        DST  @EEE1,@ARG2       @EEE1 : Destination addr on C
[1815] A8A5 B2,5E,7F GA8A5  AND  >7F,@ARG2         Reset the breakpoint if any
[1816] A8A8 05,6A,7C        B    DISO
[1817]               ***********************************************************
[1818]               * Code to decode error returned from ALC
[1819]               ***********************************************************
[1820] A8AB 8A,22    ERORZ  CASE @ERRCOD           DECODE ERROR FROM INTERPRETER
[1821] A8AD 4D,BA           BR   ERRSYN            0 SYNTAX ERROR
[1822] A8AF 4D,C6           BR   ERRMEM            1 MEMORY FULL
[1823] A8B1 4D,EE           BR   ERRBV             2 BAD VALUE
[1824] A8B3 4D,E6           BR   ERRLNF            3 LINE NOT FOUND
[1825] A8B5 4D,BA           BR   ERRSYN            4 SYNTAX
[1826] A8B7 4D,E2           BR   ERRBS             5 BAD SUBSCRIPT
[1827] A8B9 4D,BE           BR   ERRSNM            6 STRING-NUMBER MISMATCH
[1828] A8BB 4D,CA           BR   ERRSO             7 STACK OVERFLOW
[1829] A8BD 4D,EA           BR   ERRBA             8 BAD ARGUMENT
[1830] A8BF 4D,DE           BR   ERRRWG            9 RETURN WITHOUT GOSUB
[1831] A8C1 4D,F2           BR   ERRIAL            A INCORRECT ARGUMENT LIST
[1832] A8C3 4D,D2           BR   ERRFNN            B FOR/NEXT NESTING
[1833] A8C5 4D,CE           BR   ERRNWF            C NEXT WITHOUT FOR
[1834] A8C7 4D,C2           BR   ERRMUV            D IMPROPERLY USED NAME
[1835] A8C9 4D,F2           BR   ERRIAL            E INCORRECT ARGUMENT LIST
[1836] A8CB 4D,DA           BR   ERRRSC            F RECURSIVE SUBPROGRAM CALL
[1837] A8CD 4D,F6           BR   ERRSNF           10 SUBPROGRAM NOT FOUND
[1838] A8CF 46,99           BR   ERROLP           11 ONLY LEGAL IN A PROGRAM
[1839] A8D1 4D,D6           BR   ERRSNS           12 MUST BE IN SUBPROGRAM
[1840]               ***********************************************************
[1841]               * SUBROUTINE TO GET LINE # FOLLOWING 'BREAK', 'UNBREAK',
[1842]               * 'RESTORE'
[1843]               ***********************************************************
[1844] A8D3 D6,42,C9 LINE   CEQ  LNZ,@CHAT         Should be line # reference
[1845] A8D6 4D,BA           BR   ERRSYN
[1846] A8D8 0F,79           XML  PGMCHR            Get high order line #
[1847] A8DA BC,4A,42        ST   @CHAT,@FAC        Build result in FAC, FAC1
[1848] A8DD 0F,79           XML  PGMCHR
[1849] A8DF BC,4B,42        ST   @CHAT,@FAC1       Low order line #
[1850] A8E2 0F,79           XML  PGMCHR            Get token following line #
[1851] A8E4 00              RTN
[1852] A8E5 86,54    CONV1  CLR  @FAC10
[1853] A8E7 0F,10           XML  CSNUM             Convert String to Number
[1854]               ***********************************************************
[1855] A8E9 BC,A3,BA        ST   @FAC10,V@CSNTP1
       A8EC 54
[1856] A8ED BD,A3,90        DST  @FAC12,V@CSNTMP Save those in temporary, becaus

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0032 
EQUATES EXEC-359
       A8F0 56
[1857]               *                            in ERROV : WARNING routine hav
[1858]               *                            FAC12 and FAC10 values changed
[1859]               ***********************************************************
[1860] A8F1 8E,54    WRNNO  CZ   @FAC10            Numeric overflow
[1861] A8F3 68,F9           BS   GA8F9
[1862] A8F5 06,6A,82        CALL WARNZZ
[1863] A8F8 02              BYTE 2
[1864] A8F9 00       GA8F9  RTN
[1865]               ***********************************************************
[1866]               *                SUBROUTINE FOR 'GCHAR'
[1867]               ***********************************************************
[1868] A8FA 06,AC,A9 GCHAR  CALL GPHV              Get X,Y values
[1869] A8FD 06,A9,DD GCHAR2 CALL NUMVAR            Get pointer to return variabl
[1870] A900 31,00,08        MOVE 8,G@FLT1,@FAC     Clear FAC
       A903 4A,A3,F3
[1871] A906 BC,4B,7D        ST   @CB,@FAC1         Get the character
[1872] A909 A6,4B,60        SUB  OFFSET,@FAC1      Remove screen offset
[1873] A90C CA,4B,64        CHE  100,@FAC1
[1874] A90F 49,19           BR   GA919
[1875] A911 C0,4C,4B        EX   @FAC1,@FAC2
[1876] A914 AE,4B,64        DIV  100,@FAC1
[1877] A917 90,4A           INC  @FAC
[1878] A919 0F,7C    GA919  XML  ASSGNV            Assign the value to the symbo
[1879]               * RXB PATCH CODE
[1880] A91B 5E,4D           BR   GCHARA
[1881]               ***********************************************************
[1882]               *               SUBROUTINE FOR 'COLOR'
[1883]               ***********************************************************
[1884] A91D 0F,7E    COLOR  XML  SPEED             Must be
[1885] A91F 00              BYTE SYNCHK        *     at a
[1886] A920 B7              BYTE LPARZ         *       left parenthesis
[1887]               * RXB PATCH CODE
[1888] A921 87,00    COL08  DCLR @VAR0             Clear ALL pointer
[1889] A923 D6,42,EC        CEQ  ALLZ,@CHAT        ALL?
[1890] A926 49,34           BR   COL09             No.
[1891] A928 BE,00,EC        ST   ALLZ,@VAR0        Yes, store it in pointer
[1892] A92B 87,4A           DCLR @FAC              Set 0
[1893] A92D 0F,79           XML  PGMCHR            Skip ALL token.
[1894] A92F 06,B1,AD        CALL COMMA2            Skip comma.
[1895] A932 49,52           BR   COL21             Start ALL RXB routine
[1896] A934 D6,42,FD COL09  CEQ  NUMBEZ,@CHAT      If sprite number specified
[1897] A937 49,49           BR   COL20
[1898] A939 06,AD,FA        CALL CHAR1             Check sprite number (SPNUM3)
[1899] A93C 06,A9,89 COL10  CALL SPCOL             Put the color in SAL
[1900] A93F D6,42,B3        CEQ  COMMAZ,@CHAT      More color changes
[1901] A942 4B,1A           BR   LNKRTN
[1902] A944 06,AD,FC        CALL CHAR2             Skip and get sprite number (S
[1903] A947 49,3C           BR   COL10
[1904]               * This part for regular color change routine
[1905] A949 0F,7E    COL20  XML  SPEED             Parse the character
[1906] A94B 01              BYTE PARCOM         *   set and insure a comma
[1907] A94C 0F,7E           XML  SPEED             Insure in range of
[1908] A94E 02              BYTE RANGE          *   0<= x <= 14
[1909]               * RXB PATCH CODE
[1910]               *      BYTE 0,0,14
[1911] A94F 00,00,10        BYTE 0,0,16
[1912] A952 A3,4A,08 COL21  DADD >080F,@FAC        Color table addr(>0810 - >081
       A955 0F
[1913] A956 0F,77           XML  VPUSH             Push table set address
[1914] A958 0F,7E           XML  SPEED             Parse the foreground color
[1915] A95A 01              BYTE PARCOM         *   and insure a comma
[1916] A95B 06,AC,A0        CALL RAN16             Error if >16 or <1
[1917] A95E BC,0E,4B        ST   @FAC1,@VAR4       Save it

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0033 
EQUATES EXEC-359
[1918] A961 E2,0E,04        SLL  4,@VAR4           Foreground color in 4 MSBits
[1919] A964 0F,74           XML  PARSE             Get background color
[1920] A966 B6              BYTE RPARZ
[1921] A967 06,AC,A0        CALL RAN16             Error if >16 or <1
[1922] A96A B4,0E,4B        OR   @FAC1,@VAR4       Background color in 4 LSBits
[1923] A96D 0F,78           XML  VPOP              Get color table address
[1924] A96F BC,B0,4A        ST   @VAR4,V*FAC       Load the colors into the tabl
       A972 0E
[1925]               * RXB PATCH CODE
[1926] A973 D6,00,EC        CEQ  ALLZ,@VAR0        ALL in pointer.
[1927] A976 49,80           BR   COL22             No.
[1928] A978 35,00,0E        MOVE 14,V*FAC,V@1(@FAC) Fill color table with values
       A97B E0,01,4A
       A97E B0,4A
[1929] A980 D6,42,B3 COL22  CEQ  COMMAZ,@CHAT      End of call. Go back.
[1930] A983 4B,1A           BR   LNKRTN
[1931] A985 0F,79           XML  PGMCHR            Skip ","
[1932] A987 49,21           BR   COL08             Take care of the next set
[1933]               *      CALL SPCOL -- Changes color of sprite.
[1934]               *                    Called also from SPRITE.
[1935] A989 0F,74    SPCOL  XML  PARSE
[1936] A98B B6              BYTE RPARZ          *  Get the color number
[1937] A98C 06,AC,A0        CALL RAN16             Check range 1 - 16
[1938] A98F BC,E0,03        ST   @FAC1,V@3(@SPSAL) Store in SAL
       A992 08,4B
[1939] A994 00              RTN
[1940]               ***********************************************************
[1941]               * INTARG - Insures that the value in FAC is a numeric,
[1942]               *          converts it to integer, issues error message if
[1943]               *          necessary or returns.
[1944]               ***********************************************************
[1945] A995 C6,4C,63 INTARG CH   >63,@FAC2         If string - error
[1946] A998 6D,BE           BS   ERRSNM
[1947] A99A 86,54           CLR  @FAC10            ASSUME NO ERROR OR WARNING
[1948] A99C 87,6C           DCLR @FPERAD
[1949] A99E 0F,12           XML  FLTINT
[1950] A9A0 8E,54           CZ   @FAC10            If error
[1951] A9A2 4D,EE           BR   ERRBV
[1952] A9A4 D2,4A,00        CGE  0,@FAC            Can't be < zero
[1953] A9A7 4D,EE           BR   ERRBV
[1954] A9A9 00              RTN
[1955]               * FAC IS SET UP WITH F.P. 1
[1956] A9AA BC,4B,00 JOYXY  ST   @VAR0,@FAC1
[1957] A9AD 8E,00           CZ   @VAR0             If <>0
[1958] A9AF 49,B5           BR   GA995
[1959] A9B1 86,4A           CLR  @FAC              (>0000000000000000)
[1960] A9B3 49,BD           BR   GA99D
[1961] A9B5 D2,00,00 GA995  CGE  0,@VAR0
[1962] A9B8 69,BD           BS   GA99D
[1963] A9BA BE,4A,BF        ST   >BF,@FAC
[1964] A9BD 0F,7C    GA99D  XML  ASSGNV            Assign the value
[1965] A9BF 00              RTN
[1966] A9C0 BC,00,4B        ST   @FAC1,@VAR0       Keyboard selection
[1967] A9C3 06,A9,DD        CALL NUMVAR            Get variable for key-code
[1968] A9C6 D6,42,B3        CEQ  COMMAZ,@CHAT      If not comma - error
[1969] A9C9 4D,BA           BR   ERRSYN
[1970] A9CB 0F,79           XML  PGMCHR            Get next character
[1971] A9CD 06,A9,DD        CALL NUMVAR            Get variable for key-status
[1972] A9D0 BC,74,00        ST   @VAR0,@KEYBD      Keyboard selection
[1973] A9D3 31,00,08        MOVE 8,G@FLT1,@FAC     Set up float
       A9D6 4A,A3,F3
[1974] A9D9 03              SCAN                   SCAN the keyboard
[1975] A9DA 86,74           CLR  @KEYBD            Clear the code(No affect on s
[1976] A9DC 01              RTNC                   Return scan condition code

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0034 
EQUATES EXEC-359
[1977] A9DD 0F,7A    NUMVAR XML  SYM               Get the symbol name
[1978] A9DF DA,B0,4A        CLOG >C0,V*FAC         Can't be string or function
       A9E2 C0
[1979] A9E3 4D,C2           BR   ERRMUV            It is, IMPROPERLY USED NAME E
[1980] A9E5 0F,7B           XML  SMB               Get value pointer
[1981] A9E7 0F,77           XML  VPUSH             Put on stack for ASSGNV
[1982] A9E9 00              RTN                    And return
[1983] A9EA 80,00,A0 ATTREG DATA >8000,>A000,>C000,
       A9ED 00,C0,00
[1984] A9F0 9F,BF,DF        BYTE >9F,>BF,>DF,>FF,>00,>06
       A9F3 FF,00,06
[1985] A9F6 D6,42,B7 COMB   CEQ  LPARZ,@CHAT       If not '(' - error
[1986] A9F9 4D,BA           BR   ERRSYN
[1987] A9FB 00              RTN
[1988] A9FC 35,00,08 SQUISH MOVE 8,V*FAC8,@FAC     Sneak it out
       A9FF 4A,B0,52
[1989] AA02 BD,58,6E        DST  @VSPTR,@FAC14     Now move stack to squish it
[1990] AA05 A5,58,52        DSUB @FAC8,@FAC14        out - # of bytes to move
[1991] AA08 6A,13           BS   SQU05             If none to move
[1992] AA0A 34,58,EF        MOVE @FAC14,V@8(@FAC8),V@-16(@FAC8)
       AA0D FF,F0,52
       AA10 E0,08,52
[1993] AA13 A7,6E,00 SQU05  DSUB 8,@VSPTR
       AA16 08
[1994] AA17 00              RTN
[1995]               ***********************************************************
[1996]               *                 SUBPROGRAM FOR CLEAR
[1997]               ***********************************************************
[1998] AA18 07,80    CLEAR  ALL  SPACE+OFFSET      Clear the screen
[1999] AA1A BE,7F,03        ST   3,@XPT            Initialize screen pointer
[2000] AA1D 4B,1E           BR   LNKRT2            Return to caller
[2001]               ***********************************************************
[2002]               *               SUBPROGRAM FOR VERSION
[2003]               ***********************************************************
[2004] AA1F 06,A9,F6 VERS   CALL COMB              Insure have left parenthesis
[2005] AA22 06,AD,AF        CALL ERRC05            Get symbol information
[2006]               *----------------------------------------------------------
[2007]               * Change version number to 110     6/16/1981
[2008] AA25 BF,4A,07        DST  2015,@FAC              8/17/2014
       AA28 DF
[2009] AA29 0F,80           XML  CIF               Convert to floating point
[2010]               *----------------------------------------------------------
[2011] AA2B 51,B8           BR   ASSRTN            Assign and return to caller
[2012]               * INIALIZATION DATA FOR SOUND
[2013] AA2D 42,0B,12 FLTS   BYTE >42,>0B,>12,>22,>00,>00,>00,>00
       AA30 22,00,00
       AA33 00,00
[2014] AA35 01,FF,01 SNDREG BYTE >01,>FF,>01,>04,>9F,>BF,>DF,>FF,>00
       AA38 04,9F,BF
       AA3B DF,FF,00
[2015]               ***********************************************************
[2016]               *                SUBPROGRAM FOR 'SOUND'
[2017]               * Builds 2 blocks in VDP RAM
[2018]               * 1st BLOCK : >01,<ATTENUATION FOR NOISE>,<INTERRUPT COUNT>
[2019]               * 2nd BLOCK : >04,>9F,>BF,>DF,>FF,>00
[2020]               ***********************************************************
[2021] AA3E D7,80,CC XSOUND DCEQ VRMSND,@>83CC     Insure previous sound started
       AA41 03,79
[2022] AA43 6A,3E           BS   XSOUND
[2023] AA45 31,00,09        MOVE 9,G@SNDREG,V@VRMSND
       AA48 A3,79,AA
       AA4B 35
[2024] AA4C 06,AC,89        CALL LPAR              Duration in milliseconds
[2025] AA4F D2,4A,00        CGE  0,@FAC            Don't wait for completion

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0035 
EQUATES EXEC-359
[2026] AA52 6A,59           BS   GAA39
[2027] AA54 83,4A           DNEG @FAC                of previous sound
[2028] AA56 87,80,CE        DCLR @PRTNFN           Make GPL interpeters stop pre
[2029] AA59 0F,7E    GAA39  XML  SPEED             Insure duration
[2030] AA5B 02              BYTE RANGE           *  is in range
[2031] AA5C 01              BYTE 1               *   of 1 - 4250
[2032] AA5D 10,9A           DATA 4250
[2033]               * Convert duration into 1/60s of a second
[2034] AA5F AB,4A,00        DMUL 6,@FAC            Duration * 6
       AA62 06
[2035] AA63 AF,4A,00        DDIV 100,@FAC          (duration * 6) / 100
       AA66 64
[2036] AA67 8E,4B           CZ   @FAC1             If duration =0
[2037] AA69 4A,6D           BR   GAA4D
[2038] AA6B 90,4B           INC  @FAC1             Set it to 1/60th of a second
[2039] AA6D BC,A3,7B GAA4D  ST   @FAC1,V@VRMSND+2    3rd byte of the 1st block
       AA70 4B
[2040]               *                          | INTERUPT COUNT
[2041]               ***********************************************************
[2042]               *      SOUND TABLE OF 10 BYTES IN CPU RAM (>00 - >09)
[2043]               * >00 - >05 : FREQUENCY CONTROL
[2044]               * >06 - >08 : ATTENUATION CONTROL
[2045]               * >09       : NOISE CONTROL(non-zero = noise encountered)
[2046]               * >0A       : POINTER FOR CURRENT FREQENCY CONTROL
[2047]               * >0B       : POINTER FOR CURRENT ATTENUATION CONTROL
[2048]               *                    >00 , >01 FOR REG 0;
[2049]               *                    >02 , >03 FOR REG 1;
[2050]               *                    >04 , >05 FOR REG 2;
[2051]               * REG0 : >8000, REG1 : >A000, REG3 : >C000
[2052]               * INITIALIZE ATTENUATION CONTROL
[2053]               * REG0 : >9F, REG1 : >BF, REG2 : >DF
[2054]               ***********************************************************
[2055] AA71 31,00,0C        MOVE 12,G@ATTREG,@>8300
       AA74 00,A9,EA
[2056] AA77 0F,7E    SOUND1 XML  SPEED             Parse the frequency value
[2057] AA79 01              BYTE PARCOM         *   and insure a comma
[2058] AA7A 06,A3,ED        CALL CKSTNM            Must be a numeric
[2059] AA7D D2,4A,00        CGE  0,@FAC            Noise if negative
[2060] AA80 4A,BF           BR   SOUND2
[2061] AA82 31,00,08        MOVE 8,G@FLTS,@ARG     Constant 111834
       AA85 5C,AA,2D
[2062] AA88 0F,09           XML  FDIV              P = 111834/FREQUENCY
[2063] AA8A 0F,7E           XML  SPEED             Insure in range
[2064] AA8C 02              BYTE RANGE
[2065] AA8D 03              BYTE 3               * Range: 3 - 1023
[2066] AA8E 03,FF           DATA 1023
[2067]               * GET THE 4 L.S.Bits BITS AND 6 M.S.Bits OF 'P'
[2068] AA90 EB,4A,00        DSRC 4,@FAC
       AA93 04
[2069] AA94 E6,4A,04        SRL  4,@FAC
[2070] AA97 B5,90,0A        DOR  @FAC,*STADDR  1st byte of frequency control byt
       AA9A 4A
[2071]               *                         BIT   7   6   5   4   3   2   1
[2072]               *                               1  <REG>    0  <L.S.B. 4 OF
[2073]               *                         2nd byte of frequency control byt
[2074]               *                               0   0   <M.S.B. 6 of 'P'
[2075] AA9B 94,0A           INCT @STADDR           Advance ponter for next time
[2076] AA9D 06,A8,5B        CALL ATTNUT            Get attenuation
[2077]               *                        BIT    7   6   5   4   3   2   1
[2078]               *                               1   <REG>   1   0   0   0
[2079] AAA0 B0,90,0B        AND  @FAC1,*VAR2         1   <REG>   1   <ATTN/2 DB>
       AAA3 4B
[2080] AAA4 90,0B           INC  @VAR2             Advance pointer for next time
[2081]               * CHECK FOR END OF SOUND CALL

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0036 
EQUATES EXEC-359
[2082] AAA6 D6,42,B6 SOUND3 CEQ  RPARZ,@CHAT       End of statement?
[2083] AAA9 6A,DD           BS   SOUND5
[2084] AAAB 0F,7E           XML  SPEED             If not right parenthesis
[2085] AAAD 00              BYTE SYNCHK        *    then must be at
[2086] AAAE B3              BYTE COMMAZ        *      a comma
[2087] AAAF D6,0A,06        CEQ  6,@STADDR         If not 3 regs yet
[2088] AAB2 4A,77           BR   SOUND1
[2089]               * 3 sound regs already - so must be noise control
[2090] AAB4 0F,7E           XML  SPEED             Get frequency (should be nois
[2091] AAB6 01              BYTE PARCOM        *     and insure a comma
[2092] AAB7 06,A3,ED        CALL CKSTNM            Must be a numeric value
[2093] AABA D2,4A,00        CGE  0,@FAC            If not noise-error
[2094] AABD 6D,EE           BS   ERRBV
[2095]               * NOISE CONTROL
[2096] AABF D6,09,FF SOUND2 CEQ  >FF,@>8309        * BAD ARGUMENT ERROR
[2097] AAC2 4D,EA           BR   ERRBA
[2098] AAC4 83,4A           DNEG @FAC              -(FREQUENCY)
[2099] AAC6 0F,7E           XML  SPEED             Insure in range
[2100] AAC8 02              BYTE RANGE         *    of 1 - 8
[2101] AAC9 01              BYTE 1             *
[2102] AACA 00,08           DATA 8
[2103] AACC 92,4B           DEC  @FAC1             0 - 7 (2nd BIT: 'T')
[2104]               *                                           OTH, 1ST BITS:
[2105] AACE BC,09,4B        ST   @FAC1,@>8309
[2106] AAD1 B6,09,E0        OR   >E0,@>8309        Noise control byte:
[2107]               *                        BIT  7   6   5   4   3   2   1   0
[2108]               *                             1   1   1   0   0  <T>  < S >
[2109]               * PUT ATTENUATION IN THE 2ND BYTE OF 1ST BLOCK
[2110] AAD4 06,A8,5B        CALL ATTNUT
[2111] AAD7 BC,A3,7A        ST   @FAC1,V@VRMSND+1
       AADA 4B
[2112]               *                             1   1   1   1   < ATTN/2  DB>
[2113] AADB 4A,A6           BR   SOUND3            Go check for end of list
[2114] AADD 86,10    SOUND5 CLR  @VAR5             Pointer to sound table
[2115] AADF 8E,80,CE SND05  CZ   @PRTNFN           Wait untild previous
[2116] AAE2 6A,EE           BS   SOUND6
[2117] AAE4 03              SCAN                   Is finished and
[2118] AAE5 4A,DF           BR   SND05              look for a break-key
[2119] AAE7 D6,75,02        CEQ  BREAK,@RKEY       If not break-key
[2120] AAEA 4A,DF           BR   SND05
[2121] AAEC 41,27           BR   EXEC6C            If BREAK-KEY encountered
[2122]               * LOAD SOUND TABLE
[2123] AAEE BC,81,00 SOUND6 ST   *VAR5,@>8400      SOUND ADDRESS PORT
       AAF1 90,10
[2124] AAF3 90,10           INC  @VAR5             Next byte in table
[2125] AAF5 D6,10,0A        CEQ  >0A,@VAR5         If not finished
[2126] AAF8 4A,EE           BR   SOUND6
[2127] AAFA BF,4A,03        DST  VRMSND,@FAC       Where the 2 blocks are
       AAFD 79
[2128] AAFE F6,4A,01        I/O  1,@FAC            Start sound from VDP list
[2129] AB01 4B,1A           BR   LNKRTN            Return to caller
[2130]               ***********************************************************
[2131]               *                SUBPROGRAM FOR 'HCHAR'
[2132]               ***********************************************************
[2133] AB03 06,AC,D6 HCHAR  CALL HVCHR             Get X, Y values character, #
[2134] AB06 8F,4A           DCZ  @FAC              If 0 characters
[2135] AB08 6B,12           BS   HCHAR2
[2136] AB0A 08,E0,00 HCHAR1 BYTE >08,>E0,>00,>FB  * FMT '@VAR0'   Display horizo
       AB0D FB
[2137] AB0E 93,4A           DDEC @FAC              Done yet?
[2138] AB10 4B,0A           BR   HCHAR1            No, finish it
[2139]               * RXB PATCH CODE
[2140] AB12 D6,42,B3 HCHAR2 CEQ  COMMAZ,@CHAT
[2141] AB15 6B,03           BS   HCHAR

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0037 
EQUATES EXEC-359
[2142] AB17 BC,7F,02 XPTRTN ST   @MNUM,@XPT        Restore X-pointer
[2143] AB1A 0F,7E    LNKRTN XML  SPEED             Must be at
[2144] AB1C 00              BYTE SYNCHK        *     a right
[2145] AB1D B6              BYTE RPARZ         *      parenthesis
[2146] AB1E 06,6A,78 LNKRT2 CALL CHKEND            Check end of statement
[2147] AB21 4D,BA           BR   ERRSYN            If not end-of-stmt , error
[2148] AB23 06,00,12        CALL RETURN            Return to caller
[2149]               ***********************************************************
[2150]               *                SUBPROGRAM FOR 'VCHAR'
[2151]               ***********************************************************
[2152] AB26 06,AC,D6 VCHAR  CALL HVCHR             Get X, Y values character, #
[2153] AB29 8F,4A           DCZ  @FAC              If 0 characters
[2154] AB2B 6B,3F           BS   VCHAR2
[2155] AB2D 08,E0,00 VCHAR1 BYTE >08,>E0,>00,>9E,>FB * FMT '@VAR0',>31 Display v
       AB30 9E,FB
[2156] AB32 93,4A           DDEC @FAC              Done yet?
[2157] AB34 6B,3F           BS   VCHAR2            Yes, return
[2158] AB36 8E,7E           CZ   @YPT              If not at start of colunm
[2159] AB38 4B,2D           BR   VCHAR1
[2160] AB3A 90,7F           INC  @XPT              Move X-ptr to right one colun
[2161] AB3C 05,AB,2D        B    VCHAR1
[2162]               * RXB PATCH CODE
[2163] AB3F D6,42,B3 VCHAR2 CEQ  COMMAZ,@CHAT
[2164] AB42 6B,26           BS   VCHAR
[2165] AB44 4B,17           BR   XPTRTN
[2166]               ***********************************************************
[2167]               *               SUBPROGRAM FOR 'CHAR'
[2168]               ***********************************************************
[2169] AB46 06,A9,F6 CHARLY CALL COMB
[2170] AB49 0F,79    CHAR5  XML  PGMCHR            Skip "(" or ","
[2171]               * RXB PATCH CODE
[2172] AB4B D6,42,EC        CEQ  ALLZ,@CHAT
[2173] AB4E 4B,5E           BR   GAB1F
[2174] AB50 0F,79           XML  PGMCHR
[2175] AB52 06,B1,AD        CALL COMMA2
[2176] AB55 BE,00,EC        ST   ALLZ,@VAR0
[2177] AB58 BF,4A,00        DST  32,@FAC
       AB5B 20
[2178] AB5C 4B,67           BR   GAB28
[2179] AB5E 0F,7E    GAB1F  XML  SPEED             Get the first value
[2180] AB60 01              BYTE PARCOM         *    and insure a comma
[2181] AB61 0F,7E           XML  SPEED             Insure in range
[2182] AB63 02              BYTE RANGE          *   of 32 - 143
[2183]               * RXB PATCH CODE
[2184] AB64 1E              BYTE 30
[2185] AB65 00,9F           DATA 159
[2186] AB67 E3,4A,00 GAB28  DSLL 3,@FAC            Convert chr number to address
       AB6A 03
[2187] AB6B A3,4A,03        DADD >0300,@FAC        CORRECT FOR OFFSET
       AB6E 00
[2188] AB6F BD,04,4A        DST  @FAC,@VARY        Save it
[2189] AB72 0F,74           XML  PARSE             Get string
[2190] AB74 B6              BYTE RPARZ
[2191] AB75 D6,4C,65        CEQ  >65,@FAC2         MUST BE STRING
[2192] AB78 4D,BE           BR   ERRSNM
[2193] AB7A 35,00,04        MOVE 4,@FAC4,@VAR5     VAR5 pointer to string value
       AB7D 10,4E
[2194]               * Start defining character description.
[2195]               *    VARY    Address of RAM for character description.
[2196]               *    VAR5    Pointer to string value.
[2197]               *    VAR7    Length of string value.
[2198]               *    VAR9    Temporary counter.
[2199]               *    VAR9+1  Temporary counter.
[2200] AB7F C7,12,00        DCH  64,@VAR7          Max 4 characters at a time

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0038 
EQUATES EXEC-359
       AB82 40
[2201] AB83 4B,89           BR   CHAR40
[2202] AB85 BF,12,00        DST  64,@VAR7          IGNORE THE EXCESSES
       AB88 40
[2203] AB89 CB,04,07 CHAR40 DCHE SPRVB,@VARY       Don't have space for
       AB8C FF
[2204] AB8D 6C,1F           BS   CHARL4
[2205] AB8F BE,4A,30        ST   ZERO,@FAC         Floating Point Accumulator (>
[2206] AB92 35,00,0F        MOVE 15,@FAC,@FAC1
       AB95 4B,4A
[2207] AB97 8F,12           DCZ  @VAR7             Fill with zero
[2208] AB99 6B,B8           BS   CHAR50
[2209] AB9B CB,12,00        DCHE 16,@VAR7
       AB9E 10
[2210] AB9F 6B,AA           BS   GAB6B
[2211] ABA1 34,12,4A        MOVE @VAR7,V*VAR5,@FAC Move whatever
       ABA4 B0,10
[2212] ABA6 87,12           DCLR @VAR7
[2213] ABA8 4B,B8           BR   CHAR50
[2214] ABAA 35,00,10 GAB6B  MOVE 16,V*VAR5,@FAC    Move one character
       ABAD 4A,B0,10
[2215] ABB0 A7,12,00        DSUB 16,@VAR7          Less num of bytes to move
       ABB3 10
[2216] ABB4 A3,10,00        DADD 16,@VAR5          Move pointer
       ABB7 10
[2217] ABB8 BE,14,4A CHAR50 ST   >4A,@VAR9         Move pointer (>4A=FAC)
[2218] ABBB BE,15,01        ST   1,@VAR9+1
[2219] ABBE 05,AB,C3        B    GAB84
[2220] ABC1 90,15    GAB82  INC  @VAR9+1
[2221] ABC3 CE,15,08 GAB84  CGT  8,@VAR9+1
[2222] ABC6 6C,02           BS   GABC3
[2223] ABC8 86,0C           CLR  @BYTES            Clear dot-building byte
[2224] ABCA E2,0C,04 CHARL2 SLL  4,@BYTES          For loop(2 chars per byte)
[2225] ABCD BC,5C,90        ST   *VAR9,@ARG
       ABD0 14
[2226] ABD1 CA,5C,30        CHE  ZERO,@ARG         If < 0
[2227] ABD4 4D,EE           BR   ERRBV
[2228] ABD6 CE,5C,39        CGT  NINE,@ARG         If in 0-9
[2229] ABD9 4B,E5           BR   CHARL3
[2230] ABDB CA,5C,41        CHE  A,@ARG            If > 9 but < A
[2231] ABDE 4D,EE           BR   ERRBV
[2232] ABE0 C6,5C,46        CH   F,@ARG            If > F
[2233] ABE3 6D,EE           BS   ERRBV
[2234] ABE5 A6,5C,30 CHARL3 SUB  ZERO,@ARG         Character - >30
[2235] ABE8 C6,5C,0A        CH   10,@ARG           If in A-F
[2236] ABEB 4B,F0           BR   GABB1
[2237] ABED A6,5C,07        SUB  7,@ARG            Correct for that too
[2238] ABF0 B4,0C,5C GABB1  OR   @ARG,@BYTES       Dot expression
[2239] ABF3 90,14           INC  @VAR9
[2240] ABF5 DA,14,01        CLOG 1,@VAR9           1st half of row finished?
[2241] ABF8 4B,CA           BR   CHARL2            Yes, do 2nd half
[2242]               *                              (each takes half byte)
[2243] ABFA BC,B0,04        ST   @BYTES,V*VARY     Load characters
       ABFD 0C
[2244] ABFE 91,04           DINC @VARY
[2245] AC00 4B,C1           BR   GAB82             Load characters on next row
[2246] AC02 8F,12    GABC3  DCZ  @VAR7             More char to describe
[2247] AC04 4B,89           BR   CHAR40
[2248]               * RXB PATCH CODE
[2249] AC06 D6,00,EC        CEQ  ALLZ,@VAR0
[2250] AC09 4C,1F           BR   CHARL4
[2251] AC0B 87,00           DCLR @VAR0
[2252] AC0D 35,00,08 CHRFIL MOVE 8,V@>0400,V@>0408(@VAR0)
       AC10 E4,08,00

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0039 
EQUATES EXEC-359
       AC13 A4,00
[2253] AC15 A3,00,00        DADD 8,@VAR0
       AC18 08
[2254] AC19 D7,00,02        DCEQ 94*8,@VAR0
       AC1C F0
[2255] AC1D 4C,0D           BR   CHRFIL
[2256] AC1F D6,42,B3 CHARL4 CEQ  COMMAZ,@CHAT      More specified?
[2257] AC22 6B,49           BS   CHAR5
[2258] AC24 4B,1A           BR   LNKRTN            Return
[2259]               ***********************************************************
[2260]               *              SUBPROGRAM FOR 'KEY'
[2261]               ***********************************************************
[2262] AC26 06,BE,A6 KEY    CALL SPAR              GET KEY UNIT
[2263]               * RXB PATCH LABEL ************
[2264] AC29 0F,7E    GABD1  XML  SPEED             Insure in range
[2265] AC2B 02              BYTE RANGE          *   of 0 - 5
[2266] AC2C 00              BYTE 0
[2267] AC2D 00,05           DATA 5
[2268] AC2F 06,BD,07        CALL KEYJOY            Get variables for code and st
[2269]               *                              and scan keyboard
[2270]               *                             KEYJOY returns key status
[2271] AC32 6C,3D           BS   KEY1B             KEY STATUS = 1
[2272] AC34 83,4A           DNEG @FAC              Assume status = -1
[2273] AC36 D6,75,FF        CEQ  >FF,@RKEY         But correct if = 0
[2274] AC39 4C,3D           BR   KEY1B
[2275] AC3B 87,4A           DCLR @FAC              KEY STATUS = 0
[2276] AC3D 0F,7C    KEY1B  XML  ASSGNV            Assign value in variable
[2277] AC3F BF,4A,40        DST  >4001,@FAC        Re-store F.P. 1 in FAC
       AC42 01
[2278] AC43 8E,75           CZ   @RKEY             If key-code = 0
[2279] AC45 6C,65           BS   KEY2
[2280] AC47 D6,75,FF        CEQ  >FF,@RKEY         No key depressed,
[2281] AC4A 6C,61           BS   KEY1C              key code assigned to -1
[2282]               * FORMAT FOR KEYCODES ABOVE 99 ADDED FOR 99/4A HIGHEST
[2283]               * KEYCODE (OTHER THAN >FF) IS >C6=198
[2284]               * 5/7/81
[2285] AC4C CA,75,64        CHE  100,@RKEY
[2286] AC4F 4C,5C           BR   GAC04
[2287] AC51 90,4A           INC  @FAC
[2288] AC53 A6,75,64        SUB  100,@RKEY
[2289] AC56 BC,4C,75        ST   @RKEY,@FAC2       FLOATING FORMAT (>4001__00000
[2290] AC59 05,AC,5F        B    GAC07
[2291] AC5C BC,4B,75 GAC04  ST   @RKEY,@FAC1       FLOATING FORMAT (>40__0000000
[2292] AC5F 4C,67    GAC07  BR   KEY2A
[2293] AC61 83,4A    KEY1C  DNEG @FAC              KEY CODE ASSIGNED TO -1
[2294] AC63 4C,67           BR   KEY2A
[2295] AC65 87,4A    KEY2   DCLR @FAC              (>000000000000000)
[2296] AC67 0F,7C    KEY2A  XML  ASSGNV            ASSIGN VALUE TO VARIABLE
[2297]               * RXB PATCH CODE *************
[2298]               *      BR   LNKRTN
[2299] AC69 5E,25           BR   SUBRTN
[2300]               ***********************************************************
[2301]               * RXB PATCH WAS    SUBPROGRAM FOR 'JOYSTICK'
[2302]               ***********************************************************
[2303] AC6B 06,BE,A6        CALL SPAR              KEY UNIT
[2304] AC6E 0F,7E           XML  SPEED             Insure in range
[2305] AC70 02              BYTE RANGE          *   of 1 - 4
[2306] AC71 01              BYTE 1
[2307] AC72 00,04           DATA 4
[2308] AC74 06,BD,07        CALL KEYJOY            GET VARIABLES FOR X, Y
[2309]               *                              AND SCAN KEYBOARD
[2310] AC77 BC,00,76        ST   @JOYY,@VAR0       JOYSTICK Y POSITION
[2311] AC7A 06,A9,AA        CALL JOYXY             -4 to +4
[2312] AC7D BF,4A,40        DST  >4001,@FAC        Re-store F.P. 1 in FAC

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0040 
EQUATES EXEC-359
       AC80 01
[2313] AC81 BC,00,77        ST   @JOYX,@VAR0       JOYSTICK X POSITION
[2314] AC84 06,A9,AA        CALL JOYXY             -4 to +4
[2315] AC87 4B,1A           BR   LNKRTN
[2316]               ***********************************************************
[2317]               * INSURE LEFT PARENTHESIS AND THEN PARSE TO A COMMA
[2318]               ***********************************************************
[2319]               * RXB PATCH CODE
[2320] AC89 D6,42,B3 LPAR   CEQ  COMMAZ,@CHAT
[2321] AC8C 6C,94           BS   CPAR
[2322] AC8E 0F,7E           XML  SPEED             Must be
[2323] AC90 00              BYTE SYNCHK          *  at a
[2324] AC91 B7              BYTE LPARZ           *    left parenthesis
[2325] AC92 4C,98           BR   GAC35
[2326] AC94 0F,7E    CPAR   XML  SPEED
[2327] AC96 00              BYTE SYNCHK
[2328] AC97 B3              BYTE COMMAZ
[2329]               * RXB PATCH LABEL ***********
[2330] AC98 0F,74    GAC35  XML  PARSE             Do the parse
[2331] AC9A B3              BYTE COMMAZ          * Stop on a comma
[2332] AC9B 0F,7E           XML  SPEED             Must be
[2333] AC9D 00              BYTE SYNCHK          *  at a
[2334] AC9E B3              BYTE COMMAZ          *   comma
[2335] AC9F 00              RTN
[2336]               ***********************************************************
[2337]               * SUBROUTINE FOR 'RANGE' USED IN ALL SOUND AND GRAPHICS
[2338]               ***********************************************************
[2339] ACA0 0F,7E    RAN16  XML  SPEED             Insure in range
[2340] ACA2 02              BYTE RANGE          *   of 1 to 16
[2341] ACA3 01              BYTE 1
[2342] ACA4 00,10           DATA 16
[2343] ACA6 92,4B           DEC  @FAC1             Adjust to internal range
[2344] ACA8 00              RTN
[2345]               ***********************************************************
[2346]               * SUBROUTINE TO GET ROW, COLUMN VALUES
[2347]               ***********************************************************
[2348]               * RXB PATCH CODE
[2349] ACA9 06,AC,89 GPHV   CALL LPAR              Insure '(', parse, insure ','
[2350]               * RXB PATCH CODE
[2351] ACAC 0F,7E    GPHVRC XML  SPEED             Insure in range
[2352] ACAE 02              BYTE RANGE           *  of 1 - 24
[2353] ACAF 01              BYTE 1
[2354] ACB0 00,18           DATA 24
[2355] ACB2 92,4B           DEC  @FAC1             Adjust to internal range
[2356] ACB4 BC,02,7F        ST   @XPT,@MNUM
[2357] ACB7 BC,7E,4B        ST   @FAC1,@YPT        Set row pointer
[2358] ACBA 0F,7E           XML  SPEED             Get column value
[2359] ACBC 01              BYTE PARCOM          *  and insure a comma
[2360] ACBD 0F,7E           XML  SPEED             Insure in range
[2361] ACBF 02              BYTE RANGE           *  of 1 to 32
[2362] ACC0 01              BYTE 1
[2363] ACC1 00,20           DATA 32
[2364] ACC3 92,4B           DEC  @FAC1             Internal range: 0 - 31
[2365] ACC5 BC,7F,4B        ST   @FAC1,@XPT        Set column pointer
[2366] ACC8 00              RTN
[2367]               *  Subroutine to control border color
[2368]               * Character background is also affected since transparent
[2369]               *  is used.
[2370] ACC9 06,A5,65 BORDER CALL PARFF             Insure '(' , and parse
[2371] ACCC 06,AC,A0        CALL RAN16             Check 1 - 16 & put in interna
[2372] ACCF 3D,00,01        MOVE 1,@FAC1,#7        Load VDP register
       ACD2 07,4B
[2373] ACD4 4B,1E           BR   LNKRT2            Return to XB program
[2374]               * Get ROW, COLUMN VALUES AND NUMBER OF CHARACTERS

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0041 
EQUATES EXEC-359
[2375] ACD6 06,AC,A9 HVCHR  CALL GPHV              Get X, Y VALUES
[2376] ACD9 0F,74           XML  PARSE
[2377] ACDB B6              BYTE RPARZ
[2378] ACDC 06,A9,95        CALL INTARG
[2379] ACDF A2,4B,60        ADD  OFFSET,@FAC1
[2380] ACE2 BC,00,4B        ST   @FAC1,@VAR0       SAVE THE CHARACTER
[2381] ACE5 BF,4A,00        DST  1,@FAC            ASSUME 1 CHARACTER
       ACE8 01
[2382] ACE9 D6,42,B6        CEQ  RPARZ,@CHAT       If not right parenthesis
[2383] ACEC 6C,F8           BS   GAC95
[2384] ACEE 0F,7E           XML  SPEED             Must be
[2385] ACF0 00              BYTE SYNCHK          *   at a
[2386] ACF1 B3              BYTE COMMAZ          *    comma
[2387] ACF2 0F,74           XML  PARSE             # OF CHARACTERS
[2388] ACF4 B6              BYTE RPARZ
[2389] ACF5 06,A9,95        CALL INTARG            FLOATING TO INTEGER
[2390] ACF8 00       GAC95  RTN
[2391]               ***********************************************************
[2392]               * ERRWXY - Is the subroutine for CALL ERR(W,X,Y,Z)
[2393]               *  The parameters indicate:
[2394]               *   W - The error code # of the error
[2395]               *   X - Indicates whether execution(-1) error or
[2396]               *       I/O (0-255) error on LUNO 0-255
[2397]               *   Y - Indicates the severity code of the error
[2398]               *   Z - Line number of the error
[2399]               *   ERR Can be called with 2 forms:
[2400]               *       CALL ERR(W,X,Y,Z) and CALL ERR(W,X)
[2401]               *   If ERR is called and no error has occured then all
[2402]               *   values returned are zero.
[2403]               ***********************************************************
[2404] ACF9 BD,52,6E ERRWXY DST  @VSPTR,@FAC8      Get a temp VSPTR
[2405] ACFC C5,52,24 GAC99  DCH  @STVSPT,@FAC8     While not a bottom of stack
[2406] ACFF 4D,33           BR   GACD0
[2407] AD01 BC,5C,E0        ST   V@2(@FAC8),@ARG   Keep ID code in ARG area
       AD04 02,52
[2408] AD06 D6,5C,69        CEQ  >69,@ARG          *** ERROR entry
[2409] AD09 4D,12           BR   GACAF
[2410] AD0B 06,A9,FC        CALL SQUISH            Squish it out of the stack
[2411] AD0E 0F,77           XML  VPUSH             Put permanent copy of error
[2412]               *                              entry on stack
[2413] AD10 4D,3F           BR   ERR10             Jump out now
[2414]               * Jump always
[2415] AD12 D6,5C,67 GACAF  CEQ  >67,@ARG          *** FOR entry
[2416] AD15 4D,1D           BR   GACBA
[2417] AD17 A7,52,00        DSUB 32,@FAC8          Skip it
       AD1A 20
[2418] AD1B 4D,31           BR   GACCE
[2419] AD1D D6,5C,66 GACBA  CEQ  >66,@ARG          *** GOSUB entry
[2420] AD20 4D,28           BR   GACC5
[2421] AD22 A7,52,00        DSUB 8,@FAC8           Skip it
       AD25 08
[2422] AD26 4D,31           BR   GACCE
[2423] AD28 D6,5C,6A GACC5  CEQ  >6A,@ARG          * SYNTAX ERROR
[2424] AD2B 4D,BA           BR   ERRSYN
[2425] AD2D A7,52,00        DSUB 16,@FAC8          Skip it
       AD30 10
[2426] AD31 4C,FC    GACCE  BR   GAC99
[2427] AD33 BF,4A,00 GACD0  DST  >0080,@FAC        No error entry there so
       AD36 80
[2428] AD37 BF,4C,69        DST  >6900,@FAC2        fake one
       AD3A 00
[2429] AD3B 87,4E           DCLR @FAC4
[2430] AD3D 87,50           DCLR @FAC6
[2431] AD3F 0F,77    ERR10  XML  VPUSH             Push the temporary entry on

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0042 
EQUATES EXEC-359
[2432]               *                              top of stack
[2433]               * Code to get "W" in
[2434] AD41 06,A9,F6        CALL COMB              Check for left parenthesis
[2435] AD44 06,AD,AF        CALL ERRC05            Pick up user's symbol
[2436] AD47 BC,4B,EF        ST   V@-8(@VSPTR),@FAC1 Get error code
       AD4A FF,F8,6E
[2437] AD4D 0F,80           XML  CIF               Convert it to floating
[2438] AD4F 0F,7C           XML  ASSGNV            Assign it
[2439]               * Code to get "X" in
[2440] AD51 06,AD,AA        CALL ERRCOM            Check syntax & get user's sym
[2441] AD54 DA,EF,FF        CLOG >80,V@-7(@VSPTR)  If execution
       AD57 F9,6E,80
[2442] AD5A 4D,66           BR   GAD03
[2443] AD5C 31,00,08        MOVE 8,G@FLT1,@FAC     Make it such
       AD5F 4A,A3,F3
[2444] AD62 83,4A           DNEG @FAC              Make it a negative
[2445] AD64 4D,6E           BR   GAD0B
[2446] AD66 BC,4B,EF GAD03  ST   V@-5(@VSPTR),@FAC1 Get I/O LUNO number
       AD69 FF,FB,6E
[2447] AD6C 0F,80           XML  CIF               Convert it to floating
[2448] AD6E 0F,7C    GAD0B  XML  ASSGNV
[2449]               * Code to get "Y" in
[2450] AD70 D6,42,B6        CEQ  RPARZ,@CHAT       If long form of CALL ERR
[2451] AD73 6D,A5           BS   GAD42
[2452] AD75 06,AD,AA        CALL ERRCOM            Check syntax & get user's sym
[2453] AD78 BC,4B,EF        ST   V@-7(@VSPTR),@FAC1 Get severity code
       AD7B FF,F9,6E
[2454] AD7E B2,4B,7F        AND  >7F,@FAC1         Reset execution  /  I/O flag
[2455] AD81 0F,80           XML  CIF               Convert it
[2456] AD83 0F,7C           XML  ASSGNV            Assign it
[2457]               * Code to get "Z" in
[2458] AD85 06,AD,AA        CALL ERRCOM            Check syntax & get symbol
[2459] AD88 BD,4C,EF        DST  V@-2(@VSPTR),@FAC2 Get line pointer
       AD8B FF,FE,6E
[2460] AD8E BD,4A,4C        DST  @FAC2,@FAC
[2461] AD91 8F,4C           DCZ  @FAC2             If line number exists
[2462] AD93 6D,A1           BS   GAD3E
[2463] AD95 97,4C           DDECT @FAC2            Point to the line #
[2464] AD97 06,60,34        CALL GRSUB1            Read line # (2 bytes) from VD
[2465]               *                              or ERAM (use GREAD)
[2466] AD9A 4C              BYTE >4C             * @FAC2: Source addr on ERAM/VD
[2467] AD9B BD,4A,50        DST  @EEE,@FAC         Put the line # in FAC
[2468] AD9E B2,4A,7F        AND  >7F,@FAC          Reset the breakpoint if any
[2469] ADA1 0F,80    GAD3E  XML  CIF               Convert it
[2470] ADA3 0F,7C           XML  ASSGNV            Assign it
[2471] ADA5 0F,78    GAD42  XML  VPOP              Trash the temporary entry
[2472] ADA7 05,AB,1A        B    LNKRTN            Return from subprogram
[2473]               * Must be long branch because of AND above
[2474] ADAA D6,42,B3 ERRCOM CEQ  COMMAZ,@CHAT      Check for comma
[2475] ADAD 4D,BA           BR   ERRSYN
[2476] ADAF 0F,79    ERRC05 XML  PGMCHR            Get the next character
[2477] ADB1 0F,7A           XML  SYM               Collect name & s.t. entry
[2478] ADB3 0F,7B           XML  SMB               Get value space
[2479] ADB5 0F,77           XML  VPUSH             Push it
[2480] ADB7 86,4A           CLR  @FAC              Set up for conversion
[2481] ADB9 00              RTN
[2482]               * CHANGE IN ADDRESS OF THE ERROR CALLS WILL AFFECT
[2483]               * THE FILE SUBS.....
[2484]               *     ERROR messages called from this file
[2485] ADBA 06,6A,84 ERRSYN CALL ERRZZ             * SYNTAX ERROR
[2486] ADBD 03              BYTE 3             *   (shared by SUBS)
[2487] ADBE 06,6A,84 ERRSNM CALL ERRZZ             * STRING-NUMBER MISMATCH
[2488] ADC1 07              BYTE 7             *   (shared by SUBS)
[2489] ADC2 06,6A,84 ERRMUV CALL ERRZZ             * IMPROPERLY USED NAME

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0043 
EQUATES EXEC-359
[2490] ADC5 09              BYTE 9
[2491] ADC6 06,6A,84 ERRMEM CALL ERRZZ             * MEMORY FULL
[2492] ADC9 0B              BYTE 11
[2493] ADCA 06,6A,84 ERRSO  CALL ERRZZ             * STACK OVERFLOW
[2494] ADCD 0C              BYTE 12
[2495] ADCE 06,6A,84 ERRNWF CALL ERRZZ             * NEXT WITHOUT FOR
[2496] ADD1 0D              BYTE 13
[2497] ADD2 06,6A,84 ERRFNN CALL ERRZZ             * FOR/NEXT NESTING
[2498] ADD5 0E              BYTE 14
[2499] ADD6 06,6A,84 ERRSNS CALL ERRZZ             * MUST BE IN SUBPROGRAM
[2500] ADD9 0F              BYTE 15
[2501] ADDA 06,6A,84 ERRRSC CALL ERRZZ             * RECURSIVE SUBPROGRAM CALL
[2502] ADDD 10              BYTE 16
[2503] ADDE 06,6A,84 ERRRWG CALL ERRZZ             * RETURN WITHOUT GOSUB
[2504] ADE1 12              BYTE 18
[2505] ADE2 06,6A,84 ERRBS  CALL ERRZZ             * BAD SUBSCRIPT
[2506] ADE5 14              BYTE 20
[2507] ADE6 06,6A,84 ERRLNF CALL ERRZZ             * LINE NOT FOUND
[2508] ADE9 16              BYTE 22
[2509] ADEA 06,6A,84 ERRBA  CALL ERRZZ             * BAD ARGUMENTS
[2510] ADED 1C              BYTE 28
[2511] ADEE 06,6A,84 ERRBV  CALL ERRZZ             * BAD VALUE
[2512] ADF1 1E              BYTE 30            *   (shared by SUBS)
[2513] ADF2 06,6A,84 ERRIAL CALL ERRZZ             * INCORRECT ARGUMENT LIST
[2514] ADF5 1F              BYTE 31            *   (shared by SUBS)
[2515] ADF6 06,6A,84 ERRSNF CALL ERRZZ             * SUBPROGRAM NOT FOUND
[2516] ADF9 25              BYTE 37
[2517]               * Other error messages appear in this program
[2518]               * ERRRDY      * READY                        DATA 0
[2519]               * ERRBRK      * BREAK POINT                  DATA 1
[2520]               * ERROLP      * ONLY LEGAL IN A PROGRAM      DATA 27
[2521]               *
[2522]               * WRNN01      * NUMERIC OVERFLOW             DATA 2
[2523]               * WRNS02
[2524]               * WRNST1      * STRING TRUNCATED             DATA 19
[2525]               * WRNST2
[2526]               * WRNLNF      * LINE NOT FOUND               DATA 38
[2527]               *
[2528]               ***********************************************************
[2529]               * SPRITE SUBROUTINES BRANCH TABLE
[2530] ADFA 51,18    CHAR1  BR   SPNUM3            Called in CHARLY.    EXEC
[2531] ADFC 51,11    CHAR2  BR   SPNUM2            Called in CHARLY.    EXEC
[2532] ADFE 4D,FE           BR   $                 Called in CHARLY.    EXEC
[2533]               * SUBROUTINE LINK LIST
[2534] AE00 AE,0B    LINKS1 DATA LINKS2
[2535] AE02 06,53,50        STRI 'SPRITE'         SPRITE
       AE05 52,49,54
       AE08 45
[2536] AE09 AF,34           DATA SPRTE
[2537] AE0B AE,19    LINKS2 DATA LINKS3
[2538] AE0D 09,44,45        STRI 'DELSPRITE'      DELSPRITE
       AE10 4C,53,50
       AE13 52,49,54
       AE16 45
[2539] AE17 AF,65           DATA SPRDEL
[2540] AE19 AE,26    LINKS3 DATA LINKS4
[2541] AE1B 08,50,4F        STRI 'POSITION'       POSITION
       AE1E 53,49,54
       AE21 49,4F,4E
[2542] AE24 AF,A4           DATA SPRPOS
[2543] AE26 AE,30    LINKS4 DATA LINKS5
[2544] AE28 05,43,4F        STRI 'COINC'          CONIC
       AE2B 49,4E,43
[2545] AE2E BE,D3           DATA ZSCOI

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0044 
EQUATES EXEC-359
[2546] AE30 AE,3C    LINKS5 DATA LINKS6
[2547] AE32 07,4D,41        STRI 'MAGNIFY'        MAGNIFY
       AE35 47,4E,49
       AE38 46,59
[2548] AE3A B0,1A           DATA SPRMAG
[2549] AE3C AE,47    LINKS6 DATA LINKS7
[2550] AE3E 06,4D,4F        STRI 'MOTION'         MOTION
       AE41 54,49,4F
       AE44 4E
[2551] AE45 B0,32           DATA SPRMOV
[2552] AE47 AE,52    LINKS7 DATA LINKS8
[2553] AE49 06,4C,4F        STRI 'LOCATE'         LOCATE
       AE4C 43,41,54
       AE4F 45
[2554] AE50 B0,42           DATA SPRLOC
[2555] AE52 AE,5E    LINKS8 DATA LINKS9
[2556] AE54 07,50,41        STRI 'PATTERN'        PATTERN
       AE57 54,54,45
       AE5A 52,4E
[2557] AE5C B0,56           DATA SPRPAT
[2558] AE5E AE,6B    LINKS9 DATA LINKSA
[2559] AE60 08,44,49        STRI 'DISTANCE'       DISTANCE
       AE63 53,54,41
       AE66 4E,43,45
[2560] AE69 BE,E8           DATA ZSDIST
[2561] AE6B AE,73    LINKSA DATA LINKSB
[2562] AE6D 03,53,41        STRI 'SAY'            SAY
       AE70 59
[2563] AE71 B1,D0           DATA SAY
[2564] AE73 AE,7D    LINKSB DATA LINKSC
[2565] AE75 05,53,50        STRI 'SPGET'          SPGET   
       AE78 47,45,54
[2566] AE7B B3,29           DATA SPGET
[2567] AE7D AE,89    LINKSC DATA LINKSD
[2568] AE7F 07,43,48        STRI 'CHARSET'        CHARSET
       AE82 41,52,53
       AE85 45,54
[2569] AE87 B0,CE           DATA CHRSET
[2570] AE89 AE,93    LINKSD DATA LINKSE
[2571] AE8B 05,4F,4E        STRI 'ONKEY'          ONKEY
       AE8E 4B,45,59
[2572] AE91 BD,68           DATA  ZONKEY
[2573] AE93 AE,9D    LINKSE DATA LINKSF
[2574] AE95 05,4D,4F        STRI 'MOVES'          MOVES
       AE98 56,45,53
[2575] AE9B B6,25           DATA MOVES
[2576] AE9D AE,A6    LINKSF DATA LINKSG
[2577] AE9F 04,48,50        STRI 'HPUT'           HPUT
       AEA2 55,54
[2578] AEA4 B8,D3           DATA HPUT
[2579] AEA6 AE,AF    LINKSG DATA LINKSH
[2580] AEA8 04,56,50        STRI 'VPUT'           VPUT
       AEAB 55,54
[2581] AEAD B8,FB           DATA VPUT
[2582] AEAF AE,B8    LINKSH DATA LINKSI
[2583] AEB1 04,48,47        STRI 'HGET'           HGET
       AEB4 45,54
[2584] AEB6 B9,44           DATA HGET 
[2585] AEB8 AE,C1    LINKSI DATA LINKSJ
[2586] AEBA 04,56,47        STRI 'VGET'           VGET
       AEBD 45,54
[2587] AEBF B9,5E           DATA VGET
[2588] AEC1 AE,CD    LINKSJ DATA LINKSK
[2589] AEC3 07,45,58        STRI 'EXECUTE'        EXECUTE

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0045 
EQUATES EXEC-359
       AEC6 45,43,55
       AEC9 54,45
[2590] AECB BB,79           DATA EXECUT
[2591] AECD AE,D9    LINKSK DATA LINKSL
[2592] AECF 07,47,4D        STRI 'GMOTION'        GMOTION
       AED2 4F,54,49
       AED5 4F,4E
[2593] AED7 B9,81           DATA GMOT
[2594] AED9 AE,E5    LINKSL DATA LINKSM
[2595] AEDB 07,52,4D        STRI 'RMOTION'        RMOTION
       AEDE 4F,54,49
       AEE1 4F,4E
[2596] AEE3 B9,B8           DATA RMOT
[2597] AEE5 AE,ED    LINKSM DATA LINKSN
[2598] AEE7 03,48,45        STRI 'HEX'            HEX
       AEEA 58
[2599] AEEB B7,12           DATA HEX
[2600] AEED AE,F4    LINKSN DATA LINKSO
[2601] AEEF 02,49,4F        STRI 'IO'             IO
[2602] AEF2 B7,EC           DATA RXBIO
[2603] AEF4 AF,00    LINKSO DATA LINKSP
[2604] AEF6 07,49,4E        STRI 'INVERSE'        INVERSE
       AEF9 56,45,52
       AEFC 53,45
[2605] AEFE BA,1B           DATA INV
[2606] AF00 AF,0D    LINKSP DATA LINKSQ
[2607] AF02 08,53,57        STRI 'SWAPCHAR'       SWPCHAR
       AF05 41,50,43
       AF08 48,41,52
[2608] AF0B BA,63           DATA SWCHR
[2609] AF0D AF,19    LINKSQ DATA LINKSR
[2610] AF0F 07,44,55        STRI 'DUPCHAR'        DUPCHAR
       AF12 50,43,48
       AF15 41,52
[2611] AF17 BA,95           DATA DUPCHR
[2612] AF19 AF,27    LINKSR DATA LINKSS
[2613] AF1B 09,53,57        STRI 'SWAPCOLOR'      SWAPCOLOR
       AF1E 41,50,43
       AF21 4F,4C,4F
       AF24 52
[2614] AF25 BA,BD           DATA SWCLR
[2615] AF27 BB,9D    LINKSS DATA LINKST
[2616] AF29 08,44,55        STRI 'DUPCOLOR'       DUPCOLOR
       AF2C 50,43,4F
       AF2F 4C,4F,52
[2617] AF32 BB,1E           DATA DUPCLR
[2618]               ***********************************************************
[2619]               * CALL SPRITE(#SPRITE,CHAR,COLOR,Y,X,(YSPEED,XSPEED),...)
[2620]               ***********************************************************
[2621] AF34 06,B1,0B SPRTE  CALL SPNUM1            Check sprite mode and skip "(
[2622] AF37 06,B1,11        CALL SPNUM2            Get sprite number
[2623] AF3A 06,B1,52 SPRT3  CALL SPCHR             Put character number for spri
[2624] AF3D 0F,7E           XML  SPEED
[2625] AF3F 00              BYTE SYNCHK
[2626] AF40 B3              BYTE COMMAZ         *  Check for comma and skip it
[2627] AF41 06,A0,1E        CALL GA01E             Put sprite color in SAL  (SPC
[2628] AF44 0F,7E           XML  SPEED             Insure at a comma
[2629] AF46 00              BYTE SYNCHK
[2630] AF47 B3              BYTE COMMAZ
[2631] AF48 06,B1,35        CALL SPLOC             Put location of sprite in SAL
[2632] AF4B BD,B0,08        DST  @SP04+1,V*SPSAL   Put in location of sprite
       AF4E 05
[2633]               * Finish defining SAL. Check if velocity is specified
[2634] AF4F D6,42,B3 SPRT4  CEQ  COMMAZ,@CHAT      Finished!!!!!

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0046 
EQUATES EXEC-359
[2635] AF52 51,BA           BR   GB0F2
[2636] AF54 0F,79           XML  PGMCHR
[2637] AF56 D6,42,FD        CEQ  NUMBEZ,@CHAT      Next sprite specified
[2638] AF59 4F,60           BR   GAEBB
[2639] AF5B 06,B1,18        CALL SPNUM3            Get the next sprite number
[2640] AF5E 4F,3A           BR   SPRT3             And go!
[2641] AF60 06,B1,64 GAEBB  CALL SPMOVE            Get the velocity first
[2642] AF63 4F,4F           BR   SPRT4
[2643]               ***********************************************************
[2644]               * CALL DELSPRITE(#SPR,.......)  or CALL DESPRITE(ALL)
[2645]               ***********************************************************
[2646] AF65 06,B1,0B SPRDEL CALL SPNUM1            Insure at '('
[2647] AF68 0F,79    SPDEL1 XML  PGMCHR            Skip "(" or ","
[2648] AF6A D6,42,FD        CEQ  NUMBEZ,@CHAT      If sprite number
[2649] AF6D 4F,9B           BR   GAEF6
[2650] AF6F 0F,79           XML  PGMCHR            Skip "#"
[2651] AF71 0F,74           XML  PARSE             Parse the sprite number
[2652] AF73 B6              BYTE RPARZ
[2653] AF74 06,B1,1D        CALL SPNUM4            Check and convert number
[2654] AF77 87,E4,80        DCLR V@>0480(@SPSAL)   Stop motion if moving
       AF7A 08
[2655] AF7B BF,B0,08        DST  >C000,V*SPSAL     Hide the sprite off screen
       AF7E C0,00
[2656]               *----------------------------------------------------------
[2657]               * Add following 7 lines for speeding up XBASIC
[2658] AF80 D4,A3,AA        CEQ  @MOTION,V@SPNUM   Check current sprite
       AF83 7A
[2659] AF84 4F,94           BR   SPDEL2
[2660]               * no. against sprite motion count
[2661]               * yes, change to as low as possible
[2662] AF86 92,7A    GAEE1  DEC  @MOTION
[2663] AF88 6F,94           BS   SPDEL2
[2664] AF8A A7,08,00        DSUB 4,@SPSAL
       AF8D 04
[2665] AF8E 8F,E4,80        DCZ  V@>0480(@SPSAL)
       AF91 08
[2666] AF92 6F,86           BS   GAEE1
[2667]               *----------------------------------------------------------
[2668] AF94 D6,42,B3 SPDEL2 CEQ  COMMAZ,@CHAT      If more sprites
[2669] AF97 6F,68           BS   SPDEL1
[2670] AF99 4F,A2           BR   GAEFD
[2671] AF9B 0F,7E    GAEF6  XML  SPEED             Must have 'ALL' else error
[2672] AF9D 00              BYTE SYNCHK
[2673] AF9E EC              BYTE ALLZ
[2674] AF9F 06,60,16        CALL SPRINT            Reinitialize all sprites
[2675] AFA2 51,BA    GAEFD  BR   GB0F2             Return to caller
[2676]               ***********************************************************
[2677]               * CALL POSTION(#SPR,Y,X,...)
[2678]               ***********************************************************
[2679] AFA4 06,B1,0B SPRPOS CALL SPNUM1            Check for sprites and skip "(
[2680] AFA7 06,B1,11 SPRP02 CALL SPNUM2            Check sprite number
[2681] AFAA 06,B1,BD        CALL PREPN             Prepare Y-position return var
[2682] AFAD 0F,7E           XML  SPEED             Insure at a comma
[2683] AFAF 00              BYTE SYNCHK
[2684] AFB0 B3              BYTE COMMAZ
[2685] AFB1 BD,00,B0        DST  V*SPSAL,@SP00     Read X, Y position
       AFB4 08
[2686] AFB5 BC,4B,00        ST   @SP00,@FAC1       Get Y position
[2687] AFB8 D6,4B,FE        CEQ  >FE,@FAC1
[2688] AFBB 4F,C1           BR   GAF1C
[2689] AFBD 95,4A           DINCT @FAC             Get 256 as an output
[2690] AFBF 4F,C3           BR   GAF1E
[2691] AFC1 94,4B    GAF1C  INCT @FAC1             Regular adjustment for user
[2692] AFC3 06,AF,D8 GAF1E  CALL SPRP03            Check, convert & assign value

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0047 
EQUATES EXEC-359
[2693] AFC6 06,B1,BD        CALL PREPN             Prepare X-pos return variable
[2694] AFC9 BC,4B,01        ST   @SP00+1,@FAC1     Get X position
[2695] AFCC 91,4A           DINC @FAC              Adjust for the user
[2696] AFCE 06,AF,D8        CALL SPRP03            Check, convert & assign value
[2697] AFD1 D6,42,B3        CEQ  COMMAZ,@CHAT      If not finished
[2698] AFD4 6F,A7           BS   SPRP02
[2699] AFD6 51,BA           BR   GB0F2             Return
[2700] AFD8 0F,80    SPRP03 XML  CIF               Convert integer to float
[2701] AFDA D7,00,C0        DCEQ >C000,@SP00       If hidden sprite
       AFDD 00
[2702] AFDE 4F,E2           BR   GAF3D
[2703] AFE0 87,4A           DCLR @FAC              Return value zero
[2704] AFE2 0F,7C    GAF3D  XML  ASSGNV            Assign to variable
[2705] AFE4 00              RTN
[2706]               ***********************************************************
[2707]               * CALL COINC(#SPR,#SPR,TOLERANCE,CODE)
[2708]               * CALL COINC(#SPR,YLOC,XLOC,TOLERANCE,CODE)
[2709]               * CALL COINC(ALL)
[2710]               ***********************************************************
[2711] AFE5 06,B1,0B SPRCOI CALL SPNUM1
[2712] AFE8 0F,79           XML  PGMCHR            Skip "("
[2713] AFEA D6,42,EC        CEQ  ALLZ,@CHAT        Check coinc of all sprites
[2714] AFED 4F,FB           BR   GAF56
[2715] AFEF 0F,79           XML  PGMCHR            Skip "ALL"
[2716] AFF1 06,B1,AD        CALL COMMA2            Check and skip ","
[2717] AFF4 DA,7B,20        CLOG >20,@VDPSTT       Check VDP status
[2718]               * RXB PATCH CODE ************
[2719]               *      BS   NULRTN
[2720] AFF7 7E,E2           BS   NR
[2721] AFF9 50,11           BR   GAF6C
[2722]               * RXB PATCH CODE ************
[2723] AFFB 06,B0,8E GAF56  CALL CODIST            Get distance of 2 sprites
[2724] AFFE 06,B1,AA        CALL COMMA             Get tolerance level
[2725] B001 0F,7E           XML  SPEED
[2726] B003 02              BYTE RANGE           * Check against range
[2727] B004 00              BYTE 0               * FAC has tolerance level
[2728] B005 00,FF           DATA 255
[2729] B007 C5,00,4A        DCH  @FAC,@SP00        Y-loc out of range
[2730]               * RXB PATCH CODE ************
[2731]               *      BS   NULRTN
[2732] B00A 7E,E2           BS   NR
[2733] B00C C5,04,4A        DCH  @FAC,@SP04        X-loc out of range
[2734]               * RXB PATCH CODE ************
[2735]               *      BS   NULRTN
[2736] B00F 7E,E2           BS   NR
[2737]               * If no conincidence just return zero
[2738] B011 06,B1,BD GAF6C  CALL PREPN             Prepare for numeric output
[2739] B014 BF,4A,BF        DST  >BFFF,@FAC        Store -1 in FAC
       B017 FF
[2740]               * RXB PATCH CODE ************
[2741]               *      BR   ASSRTN
[2742] B018 5E,E5           BR   AR
[2743]               ***********************************************************
[2744]               * CALL MAGNIFY(magnification factor=1 - 4)
[2745]               ***********************************************************
[2746] B01A 06,B1,0B SPRMAG CALL SPNUM1            Insure at "("
[2747] B01D 0F,79           XML  PGMCHR            Skip the "("
[2748] B01F 0F,74           XML  PARSE             Parse the magnification facto
[2749] B021 B6              BYTE RPARZ
[2750] B022 0F,7E           XML  SPEED
[2751] B024 02              BYTE RANGE
[2752] B025 01              BYTE 1
[2753] B026 00,04           DATA 4
[2754]               * Next statement adding >DF to subtract 1 from FAC

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0048 
EQUATES EXEC-359
[2755] B028 A2,4B,DF        ADD  >DF,@FAC1         Turn on screen and interrupt
[2756] B02B 3D,00,01        MOVE 1,@FAC1,#1        Store it to VDP register 1
       B02E 01,4B
[2757] B030 51,BA           BR   GB0F2
[2758]               ***********************************************************
[2759]               * CALL MOTION(#SPR,YSPEED,XSPEED,...)
[2760]               ***********************************************************
[2761] B032 06,B1,0B SPRMOV CALL SPNUM1            Insure at "("
[2762]               * RXB PATCH CODE *************
[2763]               * SPRMV2 CALL SPNUM2            Get sprite number
[2764] B035 05,BE,54 SPRMV2 B    SPGS              GO or STOP
[2765] B038 06,B1,64 SPRMV3 CALL SPMOVE            Store velocity
[2766] B03B D6,42,B3 SPRMV4 CEQ  COMMAZ,@CHAT      Loop if more
[2767] B03E 70,35           BS   SPRMV2
[2768] B040 51,BA           BR   GB0F2
[2769]               ***********************************************************
[2770]               * CALL LOCATE(#SPR,YLOC,XLOC,...)
[2771]               ***********************************************************
[2772] B042 06,B1,0B SPRLOC CALL SPNUM1            Insure at "("
[2773] B045 06,B1,11 SPRLC2 CALL SPNUM2            Check sprite number
[2774] B048 06,B1,35        CALL SPLOC             Read location
[2775] B04B BD,B0,08        DST  @SP04+1,V*SPSAL   Put in sprite location
       B04E 05
[2776] B04F D6,42,B3        CEQ  COMMAZ,@CHAT      Loop if more
[2777] B052 70,45           BS   SPRLC2
[2778] B054 51,BA           BR   GB0F2
[2779]               ***********************************************************
[2780]               * CALL PATTERN(#SPR,CHAR,...)
[2781]               ***********************************************************
[2782] B056 06,B1,0B SPRPAT CALL SPNUM1            Insure at "("
[2783] B059 06,B1,11 SPRPT2 CALL SPNUM2            Get sprite number
[2784] B05C 06,B1,52        CALL SPCHR             Set the sprite character
[2785] B05F D6,42,B3        CEQ  COMMAZ,@CHAT      Loop if more
[2786] B062 70,59           BS   SPRPT2
[2787] B064 51,BA           BR   GB0F2
[2788]               ***********************************************************
[2789]               * CALL DISTANCE(#1,#2,DISTANCE)
[2790]               * CALL DISTANCE(#1,Y,X,DISTANCE)
[2791]               ***********************************************************
[2792] B066 06,B1,0B DIST   CALL SPNUM1            Insure at "("
[2793]               * RXB PATCH LABEL ************
[2794] B069 0F,79    GAFC4  XML  PGMCHR            Skip "("
[2795] B06B 06,B0,8E        CALL CODIST            Get distance in Y and X
[2796] B06E 06,B1,BD        CALL PREPN             Prepare return variable
[2797] B071 A9,00,00        DMUL @SP00,@SP00       X=X*X
[2798] B074 A9,04,04        DMUL @SP04,@SP04       Y=Y*Y
[2799] B077 A1,02,06        DADD @SP06,@SP02       @SP02=X*X+Y*Y
[2800] B07A 0D              OVF                    Checking overflow bit
[2801] B07B 70,86           BS   OVER              If overflow-indicate maximum
[2802] B07D BD,4A,02        DST  @SP02,@FAC        Put distance squared in FAC
[2803] B080 C7,02,7F        DCH  >7FFF,@SP02       If bigger then 128
       B083 FF
[2804] B084 50,8A           BR   GAFE5
[2805] B086 BF,4A,7F OVER   DST  >7FFF,@FAC        Put maximum value
       B089 FF
[2806] B08A 0F,80    GAFE5  XML  CIF               Convert to floating format
[2807]               * RXB PATCH CODE
[2808]               *      BR   ASSRTN            Assign value and return
[2809] B08C 5E,E5           BR   AR
[2810]               ***********************************************************
[2811]               * CODIST routine gets locations of two sprites or one
[2812]               *  sprite and Y and X position specified by a user and
[2813]               *  calculates absolute value of Y and X distance.
[2814]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0049 
EQUATES EXEC-359
[2815] B08E 86,00    CODIST CLR  @SP00
[2816] B090 35,00,07        MOVE 7,@SP00,@SP00+1   Clear up first 8 bytes
       B093 01,00
[2817] B095 D6,42,FD        CEQ  NUMBEZ,@CHAT      Check for #
[2818] B098 4D,BA           BR   ERRSYN
[2819] B09A 06,B1,18        CALL SPNUM3            Get the first sprite
[2820] B09D BD,01,B0        DST  V*SPSAL,@SP00+1   Location of first sprite
       B0A0 08
[2821] B0A1 90,01           INC  @SP00+1           Increment to make range 1-256
[2822] B0A3 BC,03,02        ST   @SP02,@SP02+1     Put X in SP02+1
[2823] B0A6 86,02           CLR  @SP02             Y in SP00+1
[2824] B0A8 D6,42,FD        CEQ  NUMBEZ,@CHAT      Get 2nd sprite
[2825] B0AB 50,B6           BR   GB011
[2826] B0AD 06,B1,18        CALL SPNUM3            Get the next sprite
[2827] B0B0 BD,05,B0        DST  V*SPSAL,@SP04+1   Location of second sprite
       B0B3 08
[2828] B0B4 50,BC           BR   GB017
[2829] B0B6 06,B1,35 GB011  CALL SPLOC             Get Y and X location
[2830] B0B9 06,B1,AD        CALL COMMA2            Check for comma and skip
[2831] B0BC 90,05    GB017  INC  @SP04+1           Increment to make range 1-256
[2832] B0BE A5,00,04        DSUB @SP04,@SP00       Difference in Y at SP00
[2833] B0C1 81,00           DABS @SP00             Get absolute value
[2834] B0C3 86,05           CLR  @SP04+1           Clear byte before X
[2835] B0C5 A5,05,02        DSUB @SP02,@SP04+1     Difference in Y at SP04
[2836] B0C8 81,05           DABS @SP04+1           get the absolute value
[2837] B0CA BC,05,06        ST   @SP06,@SP04+1     Put in the right place
[2838] B0CD 00              RTN
[2839]               ***********************************************************
[2840]               * CHRSET restores the standard character set and the
[2841]               *  standard colors for the standard character set
[2842]               *  (black on transparent)
[2843]               ***********************************************************
[2844] B0CE 06,6A,78 CHRSET CALL CHKEND            Must be at EOS now
[2845] B0D1 4D,BA           BR   ERRSYN            Else its an erro
[2846] B0D3 BE,4C,5E        ST   94,@FAC2          Number of characters
[2847] B0D6 86,A3,F8        CLR  V@>03F8           EDGE CHAR ADDRESS
[2848] B0D9 35,03,80        MOVE 896,V@>03F8,V@>03F9 Clear bytes
       B0DC A3,F9,A3
       B0DF F8
[2849] B0E0 BF,4A,04        DST  >0408,@FAC        Start with !
       B0E3 08
[2850] B0E4 BF,4E,9C        DST  CHARS,@FAC4       GROM ADDRESS
       B0E7 EA
[2851] B0E8 33,00,07 CHRLP  MOVE 7,G@0(@FAC4),V@1(@FAC) Get GROM Def
       B0EB E0,01,4A
       B0EE 00,00,4E
[2852] B0F1 A3,4A,00        DADD 8,@FAC            GROM ADDRESS
       B0F4 08
[2853] B0F5 A3,4E,00        DADD 7,@FAC4           VDP ADDRESS
       B0F8 07
[2854] B0F9 92,4C           DEC  @FAC2             Character Count-1
[2855] B0FB 50,E8           BR   CHRLP             0?
[2856] B0FD BE,A8,0F        ST   >10,V@>080F       Set 1st set to black on tranp
       B100 10
[2857] B101 35,00,10        MOVE 16,V@>080F,V@>0810  Ripple for res
       B104 A8,10,A8
       B107 0F
[2858] B108 06,00,12        CALL RETURN            Return to the caller
[2859]               ******************************
[2860]               * SPNUM1 ROUTINE             *
[2861]               ******************************
[2862] B10B D6,42,B7 SPNUM1 CEQ  LPARZ,@CHAT       Should be "("
[2863] B10E 4D,BA           BR   ERRSYN
[2864] B110 00              RTN

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0050 
EQUATES EXEC-359
[2865]               ******************************
[2866]               * SPNUM2 ROUTINE             *
[2867]               ******************************
[2868] B111 0F,79    SPNUM2 XML  PGMCHR            Get the next character
[2869] B113 D6,42,FD SPNUM6 CEQ  NUMBEZ,@CHAT      Must be "#"
[2870] B116 4D,BA           BR   ERRSYN
[2871] B118 0F,79    SPNUM3 XML  PGMCHR            Get next character
[2872] B11A 06,B1,AA        CALL COMMA             Parse up to comma and skip it
[2873] B11D 0F,7E    SPNUM4 XML  SPEED
[2874] B11F 02              BYTE RANGE           * Verify the value is in range
[2875] B120 01              BYTE 1               * Sprite number 1 - 28
[2876] B121 00,1C           DATA 28
[2877]               *----------------------------------------------------------
[2878]               * Insert a line here in sprite handling code for speeeding
[2879]               *  up XB    5/22/81
[2880]               * RXB PATCH LABLE ************
[2881] B123 BC,A3,AA SPNUM5 ST   @FAC1,V@SPNUM     Keep sprite number
       B126 4B
[2882]               *----------------------------------------------------------
[2883] B127 92,4B           DEC  @FAC1             Adjust for internal use
[2884] B129 E3,4A,00        DSLL 2,@FAC            Get location of SAL
       B12C 02
[2885] B12D A3,4A,03        DADD >0300,@FAC        Sprite # * 4 + >0300
       B130 00
[2886] B131 BD,08,4A        DST  @FAC,@SPSAL       Save SAL location
[2887] B134 00              RTN
[2888]               ******************************
[2889]               * SPLOC ROUTINE              *
[2890]               ******************************
[2891] B135 06,B1,AA SPLOC  CALL COMMA             Parse up to comma and skip it
[2892] B138 0F,7E           XML  SPEED
[2893] B13A 02              BYTE RANGE           * Range of Y: 1 - 256
[2894] B13B 01              BYTE 1
[2895] B13C 01,00           DATA 256
[2896] B13E 96,4B           DECT @FAC1             Adjust for internal use: FF -
[2897] B140 BD,04,4A        DST  @FAC,@SP04        Store in SP04 area
[2898] B143 0F,74           XML  PARSE
[2899] B145 B6              BYTE RPARZ           * Parse to ")" or less
[2900] B146 0F,7E           XML  SPEED
[2901] B148 02              BYTE RANGE           * Get X value. Range: 1 - 256
[2902] B149 01              BYTE 1
[2903] B14A 01,00           DATA 256
[2904] B14C 92,4B           DEC  @FAC1             Adjust for internal use: 0 -
[2905] B14E BC,06,4B        ST   @FAC1,@SP06       SP04+1=Y-loc and SP06=X-loc
[2906] B151 00              RTN
[2907]               ******************************
[2908]               * SPCHR ROUTINE              *
[2909]               ******************************
[2910] B152 0F,74    SPCHR  XML  PARSE
[2911] B154 B6              BYTE RPARZ
[2912] B155 0F,7E           XML  SPEED
[2913] B157 02              BYTE RANGE           * Check upper range
[2914]               * RXB PATCH CODE
[2915]               *      BYTE 32              * Character value 32 - 144
[2916]               *      DATA 143
[2917] B158 1E              BYTE 30
[2918] B159 00,9F           DATA 159
[2919] B15B A2,4B,60        ADD  >60,@FAC1         Add offset to character numbe
[2920] B15E BC,E0,02        ST   @FAC1,V@2(@SPSAL) Store the character value
       B161 08,4B
[2921] B163 00              RTN
[2922]               ******************************
[2923]               * SPMOVE ROUTINE             *
[2924]               ******************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0051 
EQUATES EXEC-359
[2925] B164 06,B1,AA SPMOVE CALL COMMA             Parse up to comma and skip
[2926] B167 06,B1,86        CALL RANGEV            Check if numeric and convert
[2927]               *                              to integer
[2928] B16A BC,0A,4B        ST   @FAC1,@SPTMP      Store Y velocity
[2929] B16D 0F,74           XML  PARSE             Get X velocity
[2930] B16F B6              BYTE RPARZ           * Check for ")" or less
[2931] B170 06,B1,86        CALL RANGEV            Numeric check and convert
[2932]               *                              to integer
[2933] B173 BC,4A,0A SPMOVF ST   @SPTMP,@FAC     * @FAC=Y velocity, @FAC1=X velo
[2934] B176 BD,E4,80        DST  @FAC,V@>0480(@SPSAL)  Store velocities in SAL
       B179 08,4A
[2935]               *----------------------------------------------------------
[2936]               * Add the following 3 lines for speeding up XB
[2937] B17B C4,A3,AA        CH   @MOTION,V@SPNUM   Check current sprite
       B17E 7A
[2938] B17F 51,85           BR   GB0BD              against sprite motion
[2939]               *                                counter
[2940] B181 BC,7A,A3        ST   V@SPNUM,@MOTION       higher? Yes, replace it
       B184 AA
[2941]               *----------------------------------------------------------
[2942] B185 00       GB0BD  RTN
[2943] B186 C6,4C,63 RANGEV CH   >63,@FAC2         The same as INTARG
[2944] B189 6D,BE           BS   ERRSNM
[2945] B18B 86,54           CLR  @FAC10
[2946] B18D 87,6C           DCLR @FPERAD
[2947] B18F 0F,12           XML  FLTINT
[2948] B191 8E,54           CZ   @FAC10
[2949] B193 4D,EE           BR   ERRBV
[2950] B195 D3,4A,00        DCGE 0,@FAC            If positive number,
       B198 00
[2951] B199 51,A3           BR   GB0DB
[2952] B19B C7,4A,00        DCH  >007F,@FAC         should be 0 - 127
       B19E 7F
[2953] B19F 6D,EE           BS   ERRBV
[2954] B1A1 51,A9           BR   GB0E1             If negative number,
[2955] B1A3 CB,4A,FF GB0DB  DCHE >FF80,@FAC         Should be -1 to -128
       B1A6 80
[2956] B1A7 4D,EE           BR   ERRBV
[2957] B1A9 00       GB0E1  RTN                    Otherwise its ok.
[2958]               ******************************
[2959]               * COMMA ROUTINE              *
[2960]               ******************************
[2961] B1AA 0F,74    COMMA  XML  PARSE
[2962] B1AC B3              BYTE COMMAZ
[2963] B1AD D6,42,B3 COMMA2 CEQ  COMMAZ,@CHAT
[2964] B1B0 4D,BA           BR   ERRSYN
[2965] B1B2 0F,79           XML  PGMCHR            Get next character
[2966] B1B4 00              RTN
[2967]               ******************************
[2968]               * LINK BACK TO XB            *
[2969]               ******************************
[2970] B1B5 06,B1,BD NULRTN CALL PREPN
[2971] B1B8 0F,7C    ASSRTN XML  ASSGNV
[2972] B1BA 05,A0,1C GB0F2  B    GA01C                               (LNKRTN)
[2973]               *******************************
[2974]               * PREPARE FOR PASSING ARGUMENT*
[2975]               *******************************
[2976] B1BD 0F,7A    PREPN  XML  SYM               Pick up name & search table
[2977] B1BF 0F,7B           XML  SMB               Evaluate any subscripts
[2978] B1C1 C6,4C,63        CH   >63,@FAC2         If not numeric, error
[2979] B1C4 6D,F2           BS   ERRIAL
[2980] B1C6 0F,77           XML  VPUSH             Save entry on stack
[2981] B1C8 86,4A           CLR  @FAC              Clear FAC for new value
[2982] B1CA 35,00,07        MOVE 7,@FAC,@FAC1

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0052 
EQUATES EXEC-359
       B1CD 4B,4A
[2983] B1CF 00              RTN
[2984]               ***********************************************************
[2985]               * CALL SAY(....................)
[2986]               *  Decode given parameter(s). Store all data first, then go
[2987]               *   speak it all at once.
[2988]               ***********************************************************
[2989] B1D0 D6,42,B7 SAY    CEQ  LPARZ,@CHAT       Must start with "("
[2990] B1D3 4D,BA           BR   ERRSYN
[2991] B1D5 BD,4C,6E        DST  @VSPTR,@FAC2      Save current top of stack on
[2992] B1D8 0F,77           XML  VPUSH              the stack
[2993] B1DA BF,0C,00        DST  255,@BYTES        255 bytes = 85 3 byte entires
       B1DD FF
[2994] B1DE 0F,71           XML  GETSTR            Get temp speech list string
[2995] B1E0 BF,4A,00        DST  >001C,@FAC        Indicate it is temp string (S
       B1E3 1C
[2996] B1E4 BF,4C,65        DST  >6500,@FAC2       Indicate it is string entry
       B1E7 00
[2997] B1E8 BD,4E,1C        DST  @SREF,@FAC4       Save pointer to temp string
[2998] B1EB BD,50,0C        DST  @BYTES,@FAC6      Length is 255
[2999] B1EE 0F,77           XML  VPUSH             Make it semi-permenant
[3000]               * Set up pointers into the speak list
[3001] B1F0 BD,00,4E        DST  @FAC4,@PTFBSL     Front points to begining
[3002] B1F3 BD,02,4E        DST  @FAC4,@PTLBSL     Last now points to beginning
[3003] B1F6 BD,04,00        DST  @PTFBSL,@PTEBSL
[3004] B1F9 A1,04,50        DADD @FAC6,@PTEBSL     End points to the end+1
[3005] B1FC 06,B6,1A        CALL SETRW             Set PHROM read/write address
[3006] B1FF 06,B6,0F        CALL WAIT              Wait till no one is speaking
[3007] B202 06,B3,E7 DIRSPK CALL GETPRM            Get next parameter
[3008] B205 72,79           BS   NEXT1             If non-null ASCII string
[3009] B207 BD,06,4E        DST  @FAC4,@PTFCIS     Set up pointer to first char
[3010] B20A BD,0A,50        DST  @FAC6,@PTLCIS     Set ptr-to-last-char-in-strin
[3011] B20D A1,0A,06        DADD @PTFCIS,@PTLCIS    by adding length-of-string
[3012] B210 93,0A           DDEC @PTLCIS            and subtracting 1
[3013]               * Make a speech list
[3014] B212 06,B6,1A        CALL SETRW             Set speech read/write addrs
[3015] B215 BD,08,06        DST  @PTFCIS,@PTCCIS   Start at beginning of string
[3016] B218 86,4C           CLR  @TOTTIM           Clear total time delay
[3017] B21A 06,B4,64        CALL GETTIM            Get first timing mark
[3018] B21D 06,B4,54        CALL TIMING            Get any subsequent marks
[3019]               * The total first time delay is in TOTTIM now
[3020] B220 C5,08,0A GB158  DCH  @PTLCIS,@PTCCIS   While more string
[3021] B223 72,6F           BS   GB1A7
[3022] B225 06,B3,FD        CALL PHRASE            Get next phrase
[3023]               * If spell flag is 0, try to look the phrase up. If it
[3024]               * can not be found, then set the spell flag, and it will be
[3025]               * spelled out. If found, save on speak list.
[3026] B228 8E,4B           CZ   @SPLFLG           There is a phrase
[3027] B22A 52,3B           BR   GB173
[3028] B22C 06,B4,F9        CALL LOOKUP            Try to look it up in the PHRO
[3029] B22F 8F,4D           DCZ  @DATAAD           If not found then
[3030] B231 52,38           BR   GB170
[3031] B233 BE,4B,01        ST   1,@SPLFLG         Set the spell flag
[3032] B236 52,3B           BR   GB173
[3033] B238 06,B5,FF GB170  CALL STDATA            Store data in list
[3034]               * If spell flag is 1, set time delay to >3C, and take the
[3035]               * phrase one character at a time (spell it). Look up each
[3036]               * character: if not found, use 'UHOH' data instead.
[3037]               * Regardless, store data on speak list.
[3038] B23B D6,4B,01 GB173  CEQ  1,@SPLFLG         Need to spell it out?
[3039] B23E 52,68           BR   GB1A0
[3040] B240 BD,4F,10        DST  @PTLCIP,@PTLCIL   Est last char to spell out
[3041] B243 BE,4C,3C        ST   >3C,@TOTTIM       >3C used because sounds good
[3042]               *                      Take each single character

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0053 
EQUATES EXEC-359
[3043]               * Skip over any embedded spaces encountered in a phrase
[3044] B246 D6,B0,0C GB17E  CEQ  SPACE,V*PTFCIP
       B249 20
[3045] B24A 52,50           BR   GB188
[3046] B24C 91,0C           DINC @PTFCIP
[3047] B24E 52,46           BR   GB17E
[3048]               * Set first and last pointers to same one character
[3049] B250 BD,10,0C GB188  DST  @PTFCIP,@PTLCIP
[3050] B253 06,B4,F9        CALL LOOKUP            Try to look it up
[3051]               * If not found, use data to 'UHOH'
[3052] B256 8F,4D           DCZ  @DATAAD
[3053] B258 52,5E           BR   GB196
[3054] B25A BF,4D,71        DST  >71F4,@DATAAD     Put addr of 'UHOH' in
       B25D F4
[3055] B25E 06,B5,FF GB196  CALL STDATA            Store data on speak list
[3056] B261 91,0C           DINC @PTFCIP           Go on to next character
[3057] B263 C5,0C,4F        DCH  @PTLCIL,@PTFCIP   Until done all
[3058] B266 52,46           BR   GB17E
[3059]               * At this point, get next timing group. The first timing
[3060]               * character has already been found, and it's value is still
[3061]               * in TIMLEN. Therefore, initiatory call to GETTIM not
[3062]               * needed. Simply clear TOTTIM and call TIMING.
[3063] B268 86,4C    GB1A0  CLR  @TOTTIM
[3064] B26A 06,B4,54        CALL TIMING
[3065] B26D 52,20           BR   GB158
[3066]               * At this point, finished all the phrases in this string.
[3067]               * TOTTIM should equal >FE, it indicate end of sting If it
[3068]               * doesn't equal >FE, it indicates that a timing group was
[3069]               * put on the end of the string. Therefore, save the timing
[3070]               * group with a null data address to show it is only timing.
[3071] B26F D6,4C,FE GB1A7  CEQ  >FE,@TOTTIM
[3072] B272 72,79           BS   NEXT1
[3073] B274 87,4D           DCLR @DATAAD
[3074] B276 06,B5,FF        CALL STDATA
[3075]               * Next item could be direct string.
[3076] B279 D6,42,B3 NEXT1  CEQ  COMMAZ,@CHAT      If direct string present
[3077] B27C 52,93           BR   SPEAK
[3078] B27E 06,B3,E7        CALL GETPRM            Get the next parameter
[3079] B281 72,8E           BS   NEXT2             If non-null direct string
[3080] B283 BE,4C,FF        ST   >FF,@TOTTIM       Mark TOTTIM as direct string
[3081] B286 0F,77           XML  VPUSH             Save direct string on stack
[3082] B288 BD,4D,6E        DST  @VSPTR,@DATAAD    Store stack addr on string
[3083] B28B 06,B5,FF        CALL STDATA            And add to the speak list
[3084]               * If the next character is a comma, loop thru it again
[3085] B28E D6,42,B3 NEXT2  CEQ  COMMAZ,@CHAT
[3086] B291 72,02           BS   DIRSPK
[3087]               * If end fall into SPEAK
[3088]               ***********************************************************
[3089]               * SPEAK will actually speak the speech list. It tests the
[3090]               * timing byte to see if it is an >FF. If it is, then the
[3091]               * data following it points to a direct speech data string
[3092]               * in VDP. If it is not, then the data following it points
[3093]               * to a PHROM speech data list. In the first case, this
[3094]               * routine will issue a speak external command to the PHROM
[3095]               * and then feed bytes out to the PHROM as it requests them.
[3096]               * In the second case, the address will be loaded out to the
[3097]               * PHROM, and then a speak command will be issued.
[3098]               ***********************************************************
[3099] B293 06,B6,1A SPEAK  CALL SETRW             Set read/write address
[3100] B296 C9,00,02 GB1CE  DCHE @PTLBSL,@PTFBSL   More speech list to go
[3101] B299 73,20           BS   GB258
[3102] B29B 06,B6,0F        CALL WAIT              Yes, wait until previous
[3103]               *                              speech is though
[3104] B29E D6,B0,00        CEQ  >FF,V*PTFBSL      External speech data

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0054 
EQUATES EXEC-359
       B2A1 FF
[3105] B2A2 72,C6           BS   GB1FE
[3106] B2A4 BC,79,B0        ST   V*PTFBSL,@TIMER   No, load timer
       B2A7 00
[3107] B2A8 82,79           NEG  @TIMER             and neg it to correct
[3108] B2AA BD,12,E0        DST  V@1(@PTFBSL),@PTFBPH   Put addr into PTFBPH
       B2AD 01,00
[3109] B2AF A3,00,00        DADD 3,@PTFBSL               and skip to next node
       B2B2 03
[3110] B2B3 D2,79,00 LOOP1  CGE  0,@TIMER          Wait for time delay
[3111] B2B6 52,B3           BR   LOOP1
[3112] B2B8 8E,12           CZ   @PTFBPH           If there is data
[3113] B2BA 72,C4           BS   GB1FC
[3114] B2BC 06,B5,B5        CALL LOADAD            Load the addr to PHROM
[3115] B2BF BE,C0,00        ST   >50,@VAR0(@WRITE)  and issue speak command
       B2C2 5A,50
[3116] B2C4 53,1D    GB1FC  BR   CONTIN
[3117] B2C6 91,00    GB1FE  DINC @PTFBSL           Speak external, skip over >FF
[3118] B2C8 BD,5E,B0        DST  V*PTFBSL,@PTCBED  Set up pointer to 1st byte
       B2CB 00
[3119] B2CC BD,5E,E0        DST  V@4(@PTCBED),@PTCBED    in external speech data
       B2CF 04,5E
[3120] B2D1 95,00           DINCT @PTFBSL          Skip addr bytes
[3121] B2D3 BC,62,EF        ST   V@-1(@PTCBED),@LENWST  Get Len of whole string
       B2D6 FF,FF,5E
[3122] B2D9 A6,62,03 DIRSPH SUB  3,@LENWST         Minus 3 bytes overhead
[3123]               * All external speech strings start with a >60
[3124] B2DC D6,B0,5E        CEQ  >60,V*PTCBED      Bad speech string
       B2DF 60
[3125] B2E0 4D,EE           BR   ERRBV
[3126] B2E2 06,B6,0F        CALL WAIT              Wait for go ahead
[3127] B2E5 95,5E           DINCT @PTCBED          Skip spk ext & 1st byte len
[3128] B2E7 BC,60,B0        ST   V*PTCBED,@LENCST  Get len of current string
       B2EA 5E
[3129] B2EB 91,5E           DINC @PTCBED           Skip len byte to 1st real byt
[3130] B2ED BE,56,10        ST   16,@TEMP2         Do 1st 16 bytes (fill buff)
[3131] B2F0 BE,C0,00        ST   >60,@VAR0(@WRITE) Start Speak External
       B2F3 5A,60
[3132] B2F5 BC,C0,00 LOOPR  ST   V*PTCBED,@VAR0(@WRITE) Write byte to PHROM
       B2F8 5A,B0,5E
[3133] B2FB 91,5E           DINC @PTCBED           Go to next byte
[3134] B2FD 92,62           DEC  @LENWST           1 less char in whole string
[3135] B2FF 73,1D           BS   CONTIN            Finished whole string?
[3136] B301 92,60           DEC  @LENCST           1 less char in curr string
[3137] B303 72,D9           BS   DIRSPH            Finished current string?
[3138] B305 92,56           DEC  @TEMP2            1 less char in this loop
[3139] B307 52,F5           BR   LOOPR             Not finished curr loop yet?
[3140] B309 BC,69,C0 GB241  ST   @VAR0(@READ),@SPKSTS Read status from PHROM
       B30C 00,58
[3141]                
[3142]               * If the next statement is true, it means that speak was
[3143]               * probably interupted and that it is shot at this point.
[3144]               * Therefore, we are going to quit now.
[3145] B30E DA,69,80        CLOG >80,@SPKSTS
[3146] B311 73,1D           BS   CONTIN
[3147] B313 DA,69,40        CLOG >40,@SPKSTS       Loop till buff below half
[3148] B316 73,09           BS   GB241
[3149] B318 BE,56,08        ST   8,@TEMP2          Put 8 more bytes to PHROM
[3150] B31B 52,F5           BR   LOOPR              and go do these
[3151] B31D 05,B2,96 CONTIN B    GB1CE             We've said it all!!
[3152]               * Now pop all entries off stack that we put on!
[3153] B320 0F,78    GB258  XML  VPOP              Free up a temporary string
[3154] B322 D5,6E,4C        DCEQ @FAC2,@VSPTR
[3155] B325 53,20           BR   GB258

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0055 
EQUATES EXEC-359
[3156] B327 51,BA           BR   GB0F2             And return to the caller
[3157]               ***********************************************************
[3158]               * SPGET subprogram. Load speech data from external device.
[3159]               *       Use standard file I/O
[3160]               ***********************************************************
[3161] B329 D6,42,B7 SPGET  CEQ  LPARZ,@CHAT       Must have left parenthesis
[3162] B32C 4D,BA           BR   ERRSYN
[3163] B32E 06,B6,1A        CALL SETRW             Set PHROM read/write address
[3164] B331 06,B6,0F        CALL WAIT              Wait till no one is speaking
[3165] B334 06,B3,E7 NXTPAR CALL GETPRM            Get the next parameter
[3166] B337 8F,50           DCZ  @FAC6             If non-null ASCII string
[3167] B339 73,E0           BS   GB318
[3168] B33B BD,06,4E        DST  @FAC4,@PTFCIS     Pointer to 1st char in string
[3169] B33E BD,0A,50        DST  @FAC6,@PTLCIS     Pointer to last-char-in-strin
[3170] B341 A1,0A,06        DADD @PTFCIS,@PTLCIS    by adding length-of-string
[3171] B344 93,0A           DDEC @PTLCIS             and subtracting 1
[3172] B346 06,B6,1A        CALL SETRW             Set the speech read/write add
[3173] B349 BD,08,06        DST  @PTFCIS,@PTCCIS   Set curr char to first char
[3174] B34C 86,4C           CLR  @TOTTIM           Clear total time delay
[3175] B34E 06,B4,64        CALL GETTIM            Get first timing mark
[3176] B351 06,B4,54        CALL TIMING            Get any subsquent marks
[3177]               * Get one phrase, and look it up. If the phrase is not foun
[3178]               * substitute in 'UHOH'.
[3179] B354 C5,08,0A        DCH  @PTLCIS,@PTCCIS   Possible phrase
[3180] B357 73,E0           BS   GB318
[3181] B359 06,B3,FD        CALL PHRASE            Yes, go get it
[3182] B35C D6,4B,01        CEQ  1,@SPLFLG         Spell flag set then set
[3183] B35F 53,64           BR   GB29C
[3184] B361 BD,10,0C        DST  @PTFCIP,@PTLCIP    last ptr to first (1 char)
[3185] B364 06,B4,F9 GB29C  CALL LOOKUP            Look up the phrase
[3186] B367 8F,4D           DCZ  @DATAAD           If not there,
[3187] B369 53,72           BR   GB2AA
[3188] B36B BF,4D,71        DST  >71F4,@DATAAD      use 'UHOH' data addr
       B36E F4
[3189] B36F BE,64,51        ST   >51,@STRLEN        'UHOH' data length
[3190]               * Data must be in PHRADD and PHLEN, so move it
[3191] B372 BD,01,4D GB2AA  DST  @DATAAD,@PHRADD
[3192] B375 BC,00,64        ST   @STRLEN,@PHLEN
[3193] B378 A2,00,03        ADD  3,@PHLEN          For overhead info
[3194]               * There must be a variable to put this data in. If not, err
[3195] B37B 0F,7E           XML  SPEED
[3196] B37D 00              BYTE SYNCHK
[3197] B37E B3              BYTE COMMAZ
[3198] B37F 0F,7A           XML  SYM               Find symbol in table
[3199] B381 0F,7B           XML  SMB               Evaluate andy subscripts
[3200] B383 0F,77           XML  VPUSH             Save for assignment
[3201] B385 86,0C           CLR  @BYTES            Two byte value
[3202] B387 BC,0D,00        ST   @PHLEN,@BYTES+1   Length of string needed
[3203] B38A 0F,71           XML  GETSTR            Get a string for the data
[3204] B38C 06,B6,1A        CALL SETRW             Set up speech read/write addr
[3205] B38F BF,4A,00        DST  >001C,@FAC        Now build string FAC entry
       B392 1C
[3206] B393 BF,4C,65        DST  >6500,@FAC2       String ID
       B396 00
[3207] B397 BD,4E,1C        DST  @SREF,@FAC4       Pointer to string
[3208] B39A BD,50,0C        DST  @BYTES,@FAC6      Length of string
[3209] B39D BF,B0,1C        DST  >6000,V*SREF      Mark string as speech data
       B3A0 60,00
[3210] B3A2 BC,E0,02        ST   @PHLEN,V@2(@SREF) Put in string length
       B3A5 1C,00
[3211] B3A7 A7,E0,01        DSUB 3,V@1(@SREF)       minus thei info
       B3AA 1C,00,03
[3212]               * LOADAD expects addr to be in PTFBPH, so move it.
[3213] B3AD BD,12,01        DST  @PHRADD,@PTFBPH

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0056 
EQUATES EXEC-359
[3214] B3B0 06,B5,B5        CALL LOADAD
[3215]               * Going to copy string from PHROM to VDP. The actual data
[3216]               * from PHROM is in bit-reversed order, so must reverse the
[3217]               * order after reading in the order. Remember that 3 bytes
[3218]               * PHLEN are our own overhead, so don't copy all
[3219] B3B3 C6,00,03 GB2EB  CH   3,@PHLEN
[3220] B3B6 53,DE           BR   GB316
[3221] B3B8 BE,C0,00        ST   >10,@VAR0(@WRITE) Issue read byte command
       B3BB 5A,10
[3222] B3BD BC,68,C0        ST   @VAR0(@READ),@BYTE3 Read the byte
       B3C0 00,58
[3223]               * the following code is somewhat tricky. It will bit
[3224]               * reverse the contents of BYTE3 into BYTE1 through
[3225]               * BYTE2 by means of word shifts. Note the definition of
[3226]               * BYTE1 , BYTE2, and BYTE3 in EQU's. You might try an
[3227]               * example if it isn't clear what is going on.
[3228] B3C2 86,67           CLR  @BYTE2
[3229] B3C4 BE,54,08        ST   >08,@TEMP1
[3230] B3C7 EB,67,00 RNDAG  DSRC 1,@BYTE2
       B3CA 01
[3231] B3CB E3,66,00        DSLL 1,@BYTE1
       B3CE 01
[3232] B3CF 92,54           DEC  @TEMP1
[3233] B3D1 53,C7           BR   RNDAG
[3234]               * Store the bit-corrected byte into the string & inc str pt
[3235] B3D3 BC,E0,03        ST   @BYTE1,V@3(@SREF)
       B3D6 1C,66
[3236] B3D8 91,1C           DINC @SREF
[3237] B3DA 92,00           DEC  @PHLEN            Dec the string length
[3238] B3DC 53,B3           BR   GB2EB             Go do next char if there is o
[3239] B3DE 0F,7C    GB316  XML  ASSGNV            Assign the string to variable
[3240] B3E0 D6,42,B3 GB318  CEQ  COMMAZ,@CHAT      If more go do
[3241] B3E3 73,34           BS   NXTPAR
[3242] B3E5 51,BA           BR   GB0F2
[3243]               ***********************************************************
[3244]               * GETPAM gets the next string paameter passed to the
[3245]               * routine. If that parameter is non-exist or null, then
[3246]               * condition bit is set. If the parameter is there then
[3247]               * condition bit is reset and the FAC entry describes the
[3248]               * string. In either case, return with condition is done.
[3249]               ***********************************************************
[3250] B3E7 0F,79    GETPRM XML  PGMCHR            Get next token
[3251] B3E9 D6,42,B3        CEQ  COMMAZ,@CHAT      Go set condition no parm
[3252] B3EC 73,F9           BS   SETCB
[3253] B3EE 0F,74           XML  PARSE
[3254] B3F0 B6              BYTE RPARZ
[3255] B3F1 D6,4C,65        CEQ  >65,@FAC2         If not string, error
[3256] B3F4 4D,BE           BR   ERRSNM
[3257] B3F6 8F,50           DCZ  @FAC6             Set cond if null string
[3258] B3F8 01              RTNC                   Else return
[3259] B3F9 D4,00,00 SETCB  CEQ  @VAR0,@VAR0       Set condition bit
[3260] B3FC 01              RTNC
[3261]               ***********************************************************
[3262]               * Get the next phrase out of the current string. The phrase
[3263]               * may begin with a #, which means it will continue to the
[3264]               * next #, or it many begin with an ordinary character, in
[3265]               * which case it will end with the character just before the
[3266]               * first timing character encountered. In either case, the
[3267]               * end of the string will indicate a legal end of phrase if
[3268]               * it occurs before the usual indicator!
[3269]               ***********************************************************
[3270] B3FD D6,4A,23 PHRASE CEQ  NUMBER,@CCHAR     Phrase start with #?
[3271] B400 54,38           BR   GB370
[3272] B402 91,08           DINC @PTCCIS           Yes, inc CC ptr past #

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0057 
EQUATES EXEC-359
[3273] B404 D6,B0,08 GB33C  CEQ  SPACE,V*PTCCIS    Skip spaces
       B407 20
[3274] B408 54,0E           BR   GB346
[3275] B40A 91,08           DINC @PTCCIS
[3276] B40C 54,04           BR   GB33C
[3277] B40E D6,B0,08 GB346  CEQ  NUMBER,V*PTCCIS   All spaces?
       B411 23
[3278] B412 54,17           BR   GB34F
[3279] B414 91,08           DINC @PTCCIS           Yes, skip this # too
[3280] B416 00              RTN                    And ignore this phrase
[3281] B417 BD,0C,08 GB34F  DST  @PTCCIS,@PTFCIP   Save 1st char in phrase
[3282] B41A 91,08    GB352  DINC @PTCCIS           Go on to next char
[3283]               * Got to watch for end of string. If encountered before a
[3284]               * #, act like char after string is #. Then last char will
[3285]               * be char before, or the last char in the string!!
[3286] B41C C5,08,0A        DCH  @PTLCIS,@PTCCIS
[3287] B41F 74,2A           BS   FNDNUM
[3288] B421 BC,4A,B0        ST   V*PTCCIS,@CCHAR   No, get char in CCHAR
       B424 08
[3289] B425 D6,4A,23        CEQ  NUMBER,@CCHAR     If not # continue looking
[3290] B428 54,1A           BR   GB352
[3291] B42A BD,10,08 FNDNUM DST  @PTCCIS,@PTLCIP   Last char in phrase is one
[3292] B42D 93,10           DDEC @PTLCIP            before the #
[3293] B42F 91,08           DINC @PTCCIS           Point to char after #
[3294] B431 06,B4,64        CALL GETTIM            Get 1st timing char after phr
[3295] B434 86,4B           CLR  @SPLFLG           Indicate don't spell
[3296] B436 54,53           BR   GB38B             No # as 1st char in phrase
[3297] B438 BD,0C,08 GB370  DST  @PTCCIS,@PTFCIP   Curr char is 1st char phrase
[3298] B43B 86,4B           CLR  @SPLFLG           Assume don't spell
[3299] B43D CA,4A,41        CHE  >41,@CCHAR        If not alphabetic   (>41="A")
[3300] B440 74,44           BS   GB37C
[3301] B442 90,4B           INC  @SPLFLG            set spell flag
[3302]               * Need to find end of phrase, which is char before next
[3303]               * timing char we find. Therefore, look for a timing char!
[3304] B444 91,08    GB37C  DINC @PTCCIS
[3305] B446 06,B4,64        CALL GETTIM
[3306] B449 D6,51,FF        CEQ  >FF,@TIMLEN       If not timing, loop
[3307] B44C 74,44           BS   GB37C
[3308] B44E BD,10,08        DST  @PTCCIS,@PTLCIP   Char before curr char is
[3309] B451 93,10           DDEC @PTLCIP            the last char in phrase
[3310] B453 00       GB38B  RTN
[3311]               ***********************************************************
[3312]               * TIMING will loop through chars in string until it finds
[3313]               * non-timing char. Non-timing chars have TIMLEN values of
[3314]               * >FE or >FF. GETTIM must be called before this routine to
[3315]               * establish a correct value of TIMLEN. Also, most likely
[3316]               * TOTTIM should have been cleared.
[3317]               ***********************************************************
[3318] B454 CA,51,FE TIMING CHE  >FE,@TIMLEN
[3319] B457 74,63           BS   GB39B
[3320] B459 A1,4C,51        DADD @TIMLEN,@TOTTIM
[3321] B45C 91,08           DINC @PTCCIS
[3322] B45E 06,B4,64        CALL GETTIM
[3323] B461 54,54           BR   TIMING
[3324] B463 00       GB39B  RTN
[3325]               ***********************************************************
[3326]               * GETTIM will examine the current char in the string and
[3327]               * set TIMLEN to the appropriate time delay value. TIMLEN
[3328]               * can take on the following values:
[3329]               *           >00 if char is timing '+'
[3330]               *           >06 if char is timing ' '
[3331]               *           >0C if char is timing '-'
[3332]               *           >12 if char is timing ','
[3333]               *           >1E if char is timing ';'

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0058 
EQUATES EXEC-359
[3334]               *           >30 if char is timing ':'
[3335]               *           >3C if char is timing '.'
[3336]               *           >FE if char is out of stirng bounds
[3337]               *           >FF if char is not timing
[3338]               * Note that to test timing, some manipulation of PTCCIS
[3339]               * would be neccesary, so it is stored and used in TEMP1
[3340]               ***********************************************************
[3341] B464 BC,4A,B0 GETTIM ST   V*PTCCIS,@CCHAR   Get the char
       B467 08
[3342] B468 BD,54,08        DST  @PTCCIS,@TEMP1     store curr ptr in TEMP1
[3343] B46B C5,54,0A        DCH  @PTLCIS,@TEMP1     out of string bounds?
[3344] B46E 54,74           BR   GB3AC
[3345] B470 BE,51,FE        ST   >FE,@TIMLEN       Yes, load value and return
[3346] B473 00              RTN
[3347] B474 C6,4A,3B GB3AC  CH   SEMICO,@CCHAR     Can not be timing
[3348] B477 74,DE           BS   NOTIME
[3349] B479 D6,4A,20        CEQ  SPACE,@CCHAR
[3350] B47C 54,8D           BR   GB3C5
[3351] B47E BE,51,06        ST   6,@TIMLEN
[3352] B481 D6,E0,01 GB3B9  CEQ  SPACE,V@1(@PTCCIS) While spaces
       B484 08,20
[3353] B486 54,8C           BR   GB3C4
[3354] B488 91,08           DINC @PTCCIS           Skip them
[3355] B48A 54,81           BR   GB3B9
[3356] B48C 00       GB3C4  RTN
[3357] B48D D6,4A,2B GB3C5  CEQ  PLUS,@CCHAR
[3358] B490 54,9C           BR   GB3D4
[3359] B492 91,54           DINC @TEMP1            Need to test the next char
[3360] B494 06,B4,E2        CALL NUMERC            Is it numeric
[3361] B497 74,DE           BS   NOTIME            Was numeric => not timing cha
[3362] B499 86,51           CLR  @TIMLEN           Not numeric => set as no timi
[3363] B49B 00              RTN
[3364] B49C D6,4A,2C GB3D4  CEQ  COMMAT,@CCHAR
[3365] B49F 54,A5           BR   GB3DD
[3366] B4A1 BE,51,12        ST   >12,@TIMLEN
[3367] B4A4 00              RTN
[3368] B4A5 D6,4A,2E GB3DD  CEQ  PERIOD,@CCHAR
[3369] B4A8 54,BC           BR   GB3F4
[3370] B4AA 93,54           DDEC @TEMP1            Go back to preceding char
[3371] B4AC 06,B4,E2        CALL NUMERC            Is it numeric?
[3372] B4AF 54,B8           BR   PTIME             No, so it is timing
[3373] B4B1 95,54           DINCT @TEMP1           Yes, on to following char
[3374] B4B3 06,B4,E2        CALL NUMERC            Is it numeric too?
[3375] B4B6 74,DE           BS   NOTIME            Yes, both numeric => not timi
[3376] B4B8 BE,51,3C PTIME  ST   >3C,@TIMLEN       Both not numeric  => timing
[3377] B4BB 00              RTN
[3378] B4BC D6,4A,2D GB3F4  CEQ  HYPEN,@CCHAR
[3379] B4BF 54,CC           BR   GB404
[3380] B4C1 91,54           DINC @TEMP1            Check next char
[3381] B4C3 06,B4,E2        CALL NUMERC            Is it numeric?
[3382] B4C6 74,DE           BS   NOTIME            Was numeric => not a timing c
[3383] B4C8 BE,51,0C        ST   >0C,@TIMLEN       Was not numeric => set as tim
[3384] B4CB 00              RTN
[3385] B4CC D6,4A,3A GB404  CEQ  COLON,@CCHAR
[3386] B4CF 54,D5           BR   GB40D
[3387] B4D1 BE,51,30        ST   >30,@TIMLEN
[3388] B4D4 00              RTN
[3389] B4D5 D6,4A,3B GB40D  CEQ  SEMICO,@CCHAR
[3390] B4D8 54,DE           BR   NOTIME
[3391] B4DA BE,51,1E        ST   >1E,@TIMLEN
[3392] B4DD 00              RTN
[3393] B4DE BE,51,FF NOTIME ST   >FF,@TIMLEN       Set as no timing char present
[3394] B4E1 00              RTN
[3395]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0059 
EQUATES EXEC-359
[3396]               * NUMERC tests the char pointed to by PTCCIS and verifies
[3397]               * the following:
[3398]               *  1 - it is within the current string boundaries
[3399]               *  2 - it is numeric (i.e. between '0' and '9')
[3400]               * If both of the above conditions are true, COND is set
[3401]               * upon return, otherwise COND is reset
[3402]               ***********************************************************
[3403] B4E2 C5,54,0A NUMERC DCH  @PTLCIS,@TEMP1
[3404] B4E5 74,F8           BS   GB430
[3405] B4E7 C5,06,54        DCH  @TEMP1,@PTFCIS
[3406] B4EA 74,F8           BS   GB430
[3407] B4EC CA,B0,54        CHE  >30,V*TEMP1
       B4EF 30
[3408] B4F0 54,F8           BR   GB430
[3409] B4F2 C6,B0,54        CH   >39,V*TEMP1
       B4F5 39
[3410] B4F6 53,F9           BR   SETCB
[3411] B4F8 01       GB430  RTNC
[3412]               ***********************************************************
[3413]               * LOOKUP is a prolong routine to SEARCH. In each PHROM,
[3414]               * there may be 2 trees, one starting at >0000 and the other
[3415]               * at >8000. Either may or may not be present. Presences is
[3416]               * determined if a >AA byte is at the starting location.
[3417]               * LOOKUP determines if the tree at >0000 is in, and if so,
[3418]               * calls SEARCH with that addr. If that tree is not present
[3419]               * or the phrase couldn't be found in it, LOOKUP then checks
[3420]               * if the tree at >8000 is present, and again, if so, calls
[3421]               * SEARCH with that tree address. If the word was found in
[3422]               * the first tree, or after searching the second tree, the
[3423]               * routine will return.
[3424]               ***********************************************************
[3425] B4F9 87,66    LOOKUP DCLR @BYTE1            BYTE1 contains addr of curr t
[3426] B4FB BD,12,66 TRYAGN DST  @BYTE1,@PTFBPH    Look for >AA tree header
[3427] B4FE 06,B5,B5        CALL LOADAD            LOADAD expects addr in PTFBPH
[3428] B501 BE,C0,00        ST   >10,@VAR0(@WRITE) Put out read byte command
       B504 5A,10
[3429] B506 D6,C0,00        CEQ  >AA,@VAR0(@READ)  Tree out there?
       B509 58,AA
[3430] B50B 55,16           BR   GB44E
[3431] B50D 91,12           DINC @PTFBPH           Skip the tree header
[3432] B50F 06,B5,21        CALL SEARCH            Go search this PHROM tree
[3433] B512 8F,4D           DCZ  @DATAAD           Phrase found => exit
[3434] B514 55,20           BR   FOUND
[3435] B516 A3,66,80 GB44E  DADD >8000,@BYTE1      Go to start of next PHROM tre
       B519 00
[3436]               * Note >8000 + >8000 = >0000 => tried both trees
[3437] B51A 8F,66           DCZ  @BYTE1
[3438] B51C 54,FB           BR   TRYAGN
[3439] B51E 87,4D           DCLR @DATAAD           Didnt find phrase in either t
[3440] B520 00       FOUND  RTN
[3441]               ***********************************************************
[3442]               * SEARCH actually searches the PHROM tree for the phrase.
[3443]               * The PHROM tree organization is as follows:
[3444]               *        (i.e. this is one phrase node)
[3445]               *              phrase ASCII length      1 byte
[3446]               *              actual ASCII characters  n bytes
[3447]               *              less then pointer        2 bytes
[3448]               *              greater then pointer     2 bytes
[3449]               *              speech data pointer      3 bytes
[3450]               *              speech data length       1 byte
[3451]               * The comparison of two words proceeds on a char by char
[3452]               * basis, where length is secondary to char values, i.e.
[3453]               * move > answer; number < we; eight < eighty; etc...
[3454]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0060 
EQUATES EXEC-359
[3455] B521 06,B5,B5 SEARCH CALL LOADAD            Set PHROM to start phrase nod
[3456] B524 BE,C0,00        ST   >10,@VAR0(@WRITE) Issue read byte command
       B527 5A,10
[3457] B529 86,16           CLR  @PTLCPH           Length of phrase => PTLCPH
[3458] B52B BC,17,C0        ST   @VAR0(@READ),@PTLCPH+1 (stored as 2 byte value
       B52E 00,58
[3459] B530 A1,16,12        DADD @PTFBPH,@PTLCPH   Add front ptr giving end ptr
[3460] B533 BD,14,12        DST  @PTFBPH,@PTCCPH   Set up curr char as 1 beyond
[3461] B536 91,14           DINC @PTCCPH            length byte
[3462] B538 BD,0E,0C        DST  @PTFCIP,@PTCCIP   Reset current ptr into phrase
[3463]               * Compare two characters
[3464] B53B BE,C0,00 NEXT   ST   >10,@VAR0(@WRITE) Issue read byte command
       B53E 5A,10
[3465] B540 BC,5D,C0        ST   @VAR0(@READ),@PHDATA Get char in from PHROM
       B543 00,58
[3466] B545 D4,5D,B0        CEQ  V*PTCCIP,@PHDATA  Compare the char
       B548 0E
[3467] B549 55,99           BR   GB4D1
[3468] B54B 91,14           DINC @PTCCPH           Equal, advance both pointers
[3469] B54D 91,0E           DINC @PTCCIP
[3470] B54F D6,B0,0E        CEQ  SPACE,V*PTCCIP    Skip extra spaces
       B552 20
[3471] B553 55,69           BR   GB4A1
[3472] B555 D6,E0,01 GB48D  CEQ  SPACE,V@1(@PTCCIP) While spaces
       B558 0E,20
[3473] B55A 55,60           BR   GB498
[3474] B55C 91,0E           DINC @PTCCIP           Skip them
[3475] B55E 55,55           BR   GB48D
[3476]               * By skipping extra spaces, might have reached end of phras
[3477]               * If this is true, next char in phrase = #. If so, advance
[3478]               * the pointer to be beyond end of phrase.
[3479] B560 D6,E0,01 GB498  CEQ  NUMBER,V@1(@PTCCIP)
       B563 0E,23
[3480] B565 55,69           BR   GB4A1
[3481] B567 91,0E           DINC @PTCCIP
[3482] B569 C5,14,16 GB4A1  DCH  @PTLCPH,@PTCCPH   End of PHROM word?
[3483] B56C 55,8E           BR   GB4C6
[3484] B56E C5,0E,10        DCH  @PTLCIP,@PTCCIP   Yes, end of phrase
[3485] B571 55,88           BR   GB4C0
[3486] B573 BD,12,16        DST  @PTLCPH,@PTFBPH   Yes, word found
[3487]               * Skip 5 bytes down from last char to data pointer
[3488] B576 A3,12,00        DADD 6,@PTFBPH
       B579 06
[3489] B57A 06,B5,E7        CALL READAD            Set data addr => DATAAD
[3490] B57D BE,C0,00        ST   >10,@VAR0(@WRITE) Issue read byte command
       B580 5A,10
[3491] B582 BC,64,C0        ST   @VAR0(@READ),@STRLEN Get length of speech data
       B585 00,58
[3492] B587 00              RTN
[3493] B588 BF,12,00 GB4C0  DST  3,@PTFBPH         Move 3 bytes past PTLCPH
       B58B 03
[3494] B58C 55,A5           BR   NXTPHR
[3495] B58E C5,0E,10 GB4C6  DCH  @PTLCIP,@PTCCIP   2 characters
[3496] B591 55,3B           BR   NEXT
[3497] B593 BF,12,00        DST  1,@PTFBPH         Phrase linger: use LT ptr
       B596 01
[3498] B597 55,A5           BR   NXTPHR
[3499]               * Two characters compared were not equal
[3500] B599 BF,12,00 GB4D1  DST  3,@PTFBPH         3 bytes past last to GT
       B59C 03
[3501] B59D C4,5D,B0        CH   V*PTCCIP,@PHDATA  After phrase
       B5A0 0E
[3502] B5A1 55,A5           BR   NXTPHR
[3503] B5A3 97,12           DDECT @PTFBPH          Back up 2 bytes to LT link

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0061 
EQUATES EXEC-359
[3504]               * Go get next phrase out of the PHROM to compare
[3505] B5A5 A1,12,16 NXTPHR DADD @PTLCPH,@PTFBPH   Add displacement to last char
[3506] B5A8 06,B5,E7        CALL READAD             and get the new address
[3507] B5AB 8F,4D           DCZ  @DATAAD           More leaves on this tree
[3508] B5AD 55,B0           BR   GB4E8
[3509] B5AF 00              RTN                    No, return empty handed
[3510] B5B0 BD,12,4D GB4E8  DST  @DATAAD,@PTFBPH   Store new addr in PTFBPH
[3511] B5B3 55,21           BR   SEARCH            Go compare this new word!
[3512]               * The program should never reach this point!! It should
[3513]               * return somewhere up above.
[3514]               ***********************************************************
[3515]               * LOADAD will set the addr out in the PHROM to the addr
[3516]               * found in PTFBPH. Note that the PHROM is expecting five
[3517]               * nybbles to be written out as the address.
[3518]               ***********************************************************
[3519] B5B5 BD,54,12 LOADAD DST  @PTFBPH,@TEMP1    This is destructive, so copy
[3520] B5B8 BD,56,12        DST  @PTFBPH,@TEMP2     address into temporary areas
[3521] B5BB E6,54,04        SRL  4,@TEMP1          Isolate the MSN of the MSB
[3522] B5BE E6,55,04        SRL  4,@TEMP1+1        Isolate the MSN of the LSB
[3523] B5C1 B3,56,0F        DAND >0F0F,@TEMP2      Isolate the LSN of the MSB, L
       B5C4 0F
[3524] B5C5 B7,54,40        DOR  >4040,@TEMP1      Include a 4 as MSN of all 4 n
       B5C8 40
[3525] B5C9 B7,56,40        DOR  >4040,@TEMP2       to indicate a Load Address C
       B5CC 40
[3526] B5CD BC,C0,00        ST   @TEMP2+1,@VAR0(@WRITE) Write out the LSN of th
       B5D0 5A,57
[3527] B5D2 BC,C0,00        ST   @TEMP1+1,@VAR0(@WRITE) Write out the LSN of th
       B5D5 5A,55
[3528] B5D7 BC,C0,00        ST   @TEMP2,@VAR0(@WRITE)   Write out the MSN of th
       B5DA 5A,56
[3529] B5DC BC,C0,00        ST   @TEMP1,@VAR0(@WRITE)   Write out the MSN of th
       B5DF 5A,54
[3530] B5E1 BE,C0,00        ST   >40,@VAR0(@WRITE)      Write out 0 as fifth ny
       B5E4 5A,40
[3531] B5E6 00              RTN
[3532]               ***********************************************************
[3533]               * READAD will read an address from the PHROM and store it
[3534]               * in DATAAD. Note that PTFBPH should contain the addr of
[3535]               * the PHROM location to be read so LOADAD will work.
[3536]               ***********************************************************
[3537] B5E7 06,B5,B5 READAD CALL LOADAD            Set the addr of the PHROM
[3538] B5EA BE,C0,00        ST   >10,@VAR0(@WRITE) Get high byte of addr
       B5ED 5A,10
[3539] B5EF BC,4D,C0        ST   @VAR0(@READ),@DATAAD Stroe it in DATAAD
       B5F2 00,58
[3540] B5F4 BE,C0,00        ST   >10,@VAR0(@WRITE) Get low byte of addr
       B5F7 5A,10
[3541] B5F9 BC,4E,C0        ST   @VAR0(@READ),@DATAAD+1 Store it in DATAAD+1
       B5FC 00,58
[3542] B5FE 00              RTN
[3543]               ***********************************************************
[3544]               * STDATA will store the data in DATAAD and TOTTIM onto the
[3545]               * speech list. It will also check that there is room on the
[3546]               * speech list for this entry, and abort with error if not.
[3547]               ***********************************************************
[3548] B5FF D5,02,04 STDATA DCEQ @PTEBSL,@PTLBSL   Is there room?
[3549] B602 76,21           BS   ERRSSL
[3550] B604 35,00,03        MOVE 3,@TOTTIM,V*PTLBSL   Put data in list
       B607 B0,02,4C
[3551] B60A A3,02,00        DADD 3,@PTLBSL              and inc top of list
       B60D 03
[3552] B60E 00              RTN
[3553]               ***********************************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0062 
EQUATES EXEC-359
[3554]               * WAIT loops until the speech peripheral goes idle.
[3555]               ***********************************************************
[3556]               *    ( Loop until nobody is talking)
[3557] B60F BC,69,C0 WAIT   ST   @VAR0(@READ),@SPKSTS  Read status from PHROM
       B612 00,58
[3558] B614 DA,69,80        CLOG >80,@SPKSTS
[3559] B617 56,0F           BR   WAIT
[3560] B619 00              RTN
[3561]               ***********************************************************
[3562]               * SETRW moves addrs of speech read/write from GROM to VDP
[3563]               ***********************************************************
[3564] B61A 31,00,04 SETRW  MOVE 4,G@>0046,@READ
       B61D 58,00,46
[3565] B620 00              RTN
[3566]               ***********************************************************
[3567]               *                    ERROR MESSAGES
[3568]               ***********************************************************
[3569]               *      The following calls are in EXECS file.
[3570]               * ERRSYN CALL ERRZZ           * SYNTAX ERROR
[3571]               *        BYTE 3
[3572]               * ERRSNM CALL ERRZZ           * STRING-NUMBER MISMATCH
[3573]               *        BYTE 7
[3574]               * ERRBV  CALL ERRZZ           * BAD VALUE
[3575]               *        BYTE 30
[3576]               * ERRIAL CALL ERRZZ           * INCORRECT ARGUMENT LIST
[3577]               *        BYTE 31
[3578]               ***********************************************************
[3579] B621 06,6A,84 ERRSSL  CALL ERRZZ          * SPEECH STRING TOO LONG
[3580] B624 15               BYTE 21
[3581]               ***********************************************************
[3582] B625 06,B1,0B MOVES   CALL SPNUM1         MOVES(TYPE$,BYTES,$,TO)
[3583]               *                            or MOVES(TYPE$,BYTES,FROM,$)
[3584] B628 06,A2,DC MOVESA CALL STRGET          * ( or ,
[3585] B62B BD,10,B0        DST  V*FAC4,@VAR5    * TYPE "VRG"
       B62E 4E
[3586] B62F 06,A2,F6        CALL GETNUM          * ,BYTES
[3587] B632 8F,4A           DCZ  @FAC            0?
[3588] B634 6D,EE           BS   ERRBV           BAD VALUE
[3589] B636 BD,0C,4A        DST  @FAC,@BYTES     SAVE NUMBER OF BYTES
[3590] B639 06,A2,D6        CALL STRFCH          * ,FROM
[3591] B63C D6,10,24        CEQ  36,@VAR5
[3592] B63F 56,4D           BR   MOVESX
[3593] B641 C8,0D,50        CHE  @FAC6,@BYTES+1
[3594] B644 76,53           BS   MOVESB
[3595] B646 86,0C           CLR  @BYTES
[3596] B648 BC,0D,50        ST   @FAC6,@BYTES+1
[3597] B64B 56,53           BR   MOVESB
[3598] B64D 06,A2,EE MOVESX CALL CFIFCH
[3599] B650 BD,4E,4A        DST  @FAC,@FAC4
[3600] B653 BD,04,4E MOVESB DST  @FAC4,@VARY
[3601] B656 D6,11,24        CEQ  36,@VAR6
[3602] B659 56,6B           BR   MOVESN
[3603] B65B CB,0C,01        DCHE 256,@BYTES
       B65E 00
[3604] B65F 6D,EE           BS   ERRBV
[3605] B661 0F,71           XML  GETSTR
[3606] B663 06,A3,1F        CALL NGOOD
[3607] B666 BD,4A,1C        DST  @SREF,@FAC
[3608] B669 56,6E           BR   MOVESC
[3609] B66B 06,A3,6D MOVESN CALL SUBLP3          * ,TO
[3610] B66E BD,06,4A MOVESC DST  @FAC,@VARY2
[3611] B671 D6,10,24        CEQ  36,@VAR5        * VDP FROM
[3612] B674 56,79           BR   MTYPES
[3613] B676 BE,10,56        ST   86,@VAR5

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0063 
EQUATES EXEC-359
[3614] B679 D6,11,24 MTYPES CEQ  36,@VAR6
[3615] B67C 56,81           BR   MTYPE
[3616] B67E BE,11,56        ST   86,@VAR6
[3617] B681 D6,10,56 MTYPE  CEQ  86,@VAR5        * VDP FROM
[3618] B684 56,AE           BR   MTYPE3
[3619] B686 D6,11,56        CEQ  86,@VAR6        * VDP TO
[3620] B689 56,93           BR   MTYPE1
[3621] B68B 34,0C,E0 MTYPE0 MOVE @BYTES,V@0(@VARY),V@0(@VARY2)
       B68E 00,06,E0
       B691 00,04
[3622] B693 D6,11,52 MTYPE1 CEQ  82,@VAR6        * RAM TO
[3623] B696 56,A1           BR   MTYPE2
[3624] B698 34,0C,CF        MOVE @BYTES,V@0(@VARY),@0(@VARY2)
       B69B 7D,00,06
       B69E E0,00,04
[3625] B6A1 D6,11,47 MTYPE2 CEQ  71,@VAR6        * GRAM TO
[3626] B6A4 56,AE           BR   MTYPE3
[3627] B6A6 2C,0C,00        MOVE @BYTES,V@0(@VARY),G@0(@VARY2)
       B6A9 00,06,E0
       B6AC 00,04
[3628] B6AE D6,10,52 MTYPE3 CEQ  82,@VAR5        * RAM FROM
[3629] B6B1 56,DE           BR   MTYPE7
[3630] B6B3 D6,11,56        CEQ  86,@VAR6        * VDP TO
[3631] B6B6 56,C1           BR   MTYPE5
[3632] B6B8 34,0C,E0 MTYPE4 MOVE @BYTES,@0(@VARY),V@0(@VARY2)
       B6BB 00,06,CF
       B6BE 7D,00,04
[3633] B6C1 D6,11,52 MTYPE5 CEQ  82,@VAR6        * RAM TO
[3634] B6C4 56,D0           BR   MTYPE6
[3635] B6C6 34,0C,CF        MOVE @BYTES,@0(@VARY),@0(@VARY2)
       B6C9 7D,00,06
       B6CC CF,7D,00
       B6CF 04
[3636] B6D0 D6,11,47 MTYPE6 CEQ  71,@VAR6        * GRAM TO
[3637] B6D3 56,DE           BR   MTYPE7
[3638] B6D5 2C,0C,00        MOVE @BYTES,@0(@VARY),G@0(@VARY2)
       B6D8 00,06,CF
       B6DB 7D,00,04
[3639] B6DE D6,10,47 MTYPE7 CEQ  71,@VAR5        * GRAM FROM
[3640] B6E1 57,0B           BR   MOVESD
[3641] B6E3 D6,11,56        CEQ  86,@VAR6        * VDP TO
[3642] B6E6 56,F0           BR   MTYPE9
[3643] B6E8 32,0C,E0 MTYPE8 MOVE @BYTES,G@0(@VARY),V@0(@VARY2)
       B6EB 00,06,00
       B6EE 00,04
[3644] B6F0 D6,11,52 MTYPE9 CEQ  82,@VAR6        * RAM TO
[3645] B6F3 56,FE           BR   MTYPEA
[3646] B6F5 32,0C,CF        MOVE @BYTES,G@0(@VARY),@0(@VARY2)
       B6F8 7D,00,06
       B6FB 00,00,04
[3647] B6FE D6,11,47 MTYPEA CEQ  71,@VAR6        * GRAM TO
[3648] B701 57,0B           BR   MOVESD
[3649] B703 2A,0C,00        MOVE @BYTES,G@0(@VARY),G@0(@VARY2)
       B706 00,06,00
       B709 00,04
[3650] B70B D6,42,B3 MOVESD CEQ  >B3,@CHAT
[3651] B70E 76,28           BS   MOVESA
[3652] B710 4B,1A           BR   LNKRTN
[3653]               *******************************
[3654] B712 06,B1,0B HEX    CALL SPNUM1            * HEX(variable,variable)
[3655] B715 06,A2,D6 HEXAGN CALL STRFCH            Get STRING or NUMBER
[3656] B718 D6,4C,65        CEQ  >65,@FAC2         STRING?
[3657] B71B 77,72           BS   HEXSTR            Yes
[3658] B71D 06,A2,EE        CALL CFIFCH            No

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0064 
EQUATES EXEC-359
[3659] B720 BD,56,4A        DST  @FAC,@TEMP2
[3660] B723 BF,0C,00        DST  >0004,@BYTES
       B726 04
[3661] B727 0F,71           XML  GETSTR
[3662] B729 BD,12,1C        DST  @SREF,@STRPTR
[3663] B72C BC,00,56        ST   @TEMP2,@VAR0
[3664] B72F E6,00,04        SRL  4,@VAR0
[3665] B732 06,B7,60        CALL HEXNS
[3666] B735 BC,00,56        ST   @TEMP2,@VAR0
[3667] B738 E2,00,04        SLL  4,@VAR0
[3668] B73B E6,00,04        SRL  4,@VAR0
[3669] B73E 06,B7,60        CALL HEXNS
[3670] B741 BC,00,57        ST   @TEMP2+1,@VAR0
[3671] B744 E6,00,04        SRL  4,@VAR0
[3672] B747 06,B7,60        CALL HEXNS
[3673] B74A BC,00,57        ST   @TEMP2+1,@VAR0
[3674] B74D E2,00,04        SLL  4,@VAR0
[3675] B750 E6,00,04        SRL  4,@VAR0
[3676] B753 06,B7,60        CALL HEXNS
[3677] B756 D6,42,B3        CEQ  COMMAZ,@CHAT
[3678] B759 4D,BA           BR   ERRSYN
[3679] B75B 06,A3,1F        CALL NGOOD
[3680] B75E 57,B5           BR   HEXDON
[3681] B760 CA,00,0A HEXNS  CHE  >0A,@VAR0
[3682] B763 57,68           BR   HEXNS2
[3683] B765 A2,00,07        ADD  >07,@VAR0
[3684] B768 A2,00,30 HEXNS2 ADD  >30,@VAR0
[3685] B76B BC,B0,12        ST   @VAR0,V*STRPTR
       B76E 00
[3686] B76F 91,12           DINC @STRPTR
[3687] B771 00              RTN
[3688] B772 87,56    HEXSTR DCLR @TEMP2
[3689] B774 BD,12,4E        DST  @FAC4,@STRPTR
[3690] B777 CB,50,00        DCHE 5,@FAC6
       B77A 05
[3691] B77B 77,89           BS   HEXS4
[3692] B77D 8A,51           CASE @FAC7
[3693] B77F 57,A7           BR   HEXS0
[3694] B781 57,A1           BR   HEXS1
[3695] B783 57,98           BR   HEXS2
[3696] B785 57,92           BR   HEXS3
[3697] B787 57,89           BR   HEXS4
[3698] B789 06,B7,BC HEXS4  CALL HEXSN
[3699] B78C E2,00,04        SLL  4,@VAR0
[3700] B78F A0,56,00        ADD  @VAR0,@TEMP2
[3701] B792 06,B7,BC HEXS3  CALL HEXSN
[3702] B795 A0,56,00        ADD  @VAR0,@TEMP2
[3703] B798 06,B7,BC HEXS2  CALL HEXSN
[3704] B79B E2,00,04        SLL  4,@VAR0
[3705] B79E A0,57,00        ADD  @VAR0,@TEMP2+1
[3706] B7A1 06,B7,BC HEXS1  CALL HEXSN
[3707] B7A4 A0,57,00        ADD  @VAR0,@TEMP2+1
[3708] B7A7 0F,79    HEXS0  XML  PGMCHR
[3709] B7A9 06,A3,3A        CALL SNDER
[3710] B7AC 06,A3,74        CALL CLRFAC
[3711] B7AF BD,4A,56        DST  @TEMP2,@FAC
[3712] B7B2 06,A3,41        CALL CIFSND
[3713] B7B5 D6,42,B3 HEXDON CEQ  COMMAZ,@CHAT
[3714] B7B8 77,15           BS   HEXAGN
[3715] B7BA 4B,1A           BR   LNKRTN
[3716] B7BC BC,00,B0 HEXSN  ST   V*STRPTR,@VAR0
       B7BF 12
[3717] B7C0 CA,00,67        CHE  103,@VAR0         * g ?
[3718] B7C3 6D,EA           BS   ERRBA

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0065 
EQUATES EXEC-359
[3719] B7C5 CA,00,61        CHE  97,@VAR0          * a ?
[3720] B7C8 57,CD           BR   HEXSN2
[3721] B7CA A6,00,20        SUB  32,@VAR0          * -32
[3722] B7CD CA,00,47 HEXSN2 CHE  71,@VAR0          * G ?
[3723] B7D0 6D,EA           BS   ERRBA
[3724] B7D2 CA,00,41        CHE  65,@VAR0          * A ?
[3725] B7D5 57,DC           BR   HEXSN3
[3726] B7D7 A6,00,37        SUB  55,@VAR0          * -55
[3727] B7DA 57,E9           BR   HEXSN4
[3728] B7DC CA,00,3A HEXSN3 CHE  58,@VAR0          * : ?
[3729] B7DF 6D,EA           BS   ERRBA
[3730] B7E1 CA,00,30        CHE  48,@VAR0          * 0 ?
[3731] B7E4 4D,EA           BR   ERRBA
[3732] B7E6 A6,00,30        SUB  48,@VAR0          * -48
[3733] B7E9 91,12    HEXSN4 DINC @STRPTR
[3734] B7EB 00              RTN
[3735]               **************************
[3736] B7EC 06,B1,0B RXBIO  CALL SPNUM1       * IO
[3737] B7EF 06,A2,F6 IOAGN  CALL GETNUM       * TYPE 0-6
[3738] B7F2 CA,4B,07        CHE  >07,@FAC1
[3739] B7F5 6D,EE           BS   ERRBV
[3740] B7F7 BC,04,4B        ST   @FAC1,@VARY
[3741] B7FA 06,A3,6D        CALL SUBLP3       * ADDRESS/
[3742] B7FD 8A,04           CASE @VARY        * BITS/BYTES
[3743] B7FF 58,0D           BR   SOG
[3744] B801 58,12           BR   SOV
[3745] B803 58,17           BR   CRUI
[3746] B805 58,42           BR   CRUO
[3747] B807 58,6C           BR   CSW
[3748] B809 58,74           BR   CSR
[3749] B80B 58,7C           BR   CSV
[3750] B80D F6,4A,00 SOG    I/O  0,@FAC
[3751] B810 58,82           BR   IODONE
[3752] B812 F6,4A,01 SOV    I/O  1,@FAC
[3753] B815 58,82           BR   IODONE
[3754] B817 06,B8,91 CRUI   CALL CRUSET
[3755] B81A F6,0E,02        I/O  2,@VAR4
[3756] B81D 0F,79           XML  PGMCHR
[3757] B81F 06,A3,3A        CALL SNDER
[3758] B822 06,A3,74        CALL CLRFAC
[3759] B825 BC,4B,00        ST   @VAR0,@FAC1
[3760] B828 06,A3,41        CALL CIFSND       * VARIABLE1
[3761] B82B CA,04,09        CHE  >09,@VARY
[3762] B82E 78,32           BS   CRUI16
[3763] B830 58,82           BR   IODONE
[3764] B832 0F,79    CRUI16 XML  PGMCHR
[3765] B834 06,A3,3A        CALL SNDER
[3766] B837 06,A3,74        CALL CLRFAC
[3767] B83A BC,4B,01        ST   @VARV,@FAC1
[3768] B83D 06,A3,41        CALL CIFSND       * VARIABLE2
[3769] B840 58,82           BR   IODONE
[3770] B842 06,B8,91 CRUO   CALL CRUSET
[3771] B845 06,A3,6D        CALL SUBLP3       * VARIABLE1
[3772] B848 CB,4A,01        DCHE >0100,@FAC
       B84B 00
[3773] B84C 6D,EE           BS   ERRBV
[3774] B84E CA,04,09        CHE  >09,@VARY
[3775] B851 78,58           BS   CRUO16
[3776] B853 BC,00,4B        ST   @FAC1,@VAR0
[3777] B856 58,67           BR   CRUO8
[3778] B858 BD,00,4A CRUO16 DST  @FAC,@VAR0
[3779] B85B 06,A3,6D        CALL SUBLP3       * VARIABLE2
[3780] B85E CB,4A,01        DCHE >0100,@FAC
       B861 00

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0066 
EQUATES EXEC-359
[3781] B862 6D,EE           BS   ERRBV
[3782] B864 BC,01,4B        ST   @FAC1,@VARV
[3783] B867 F6,0E,03 CRUO8  I/O  3,@VAR4
[3784] B86A 58,82           BR   IODONE
[3785] B86C 06,B8,A7 CSW    CALL CSLOAD
[3786] B86F F6,0E,04        I/O  4,@VAR4
[3787] B872 58,82           BR   IODONE
[3788] B874 06,B8,A7 CSR    CALL CSLOAD
[3789] B877 F6,0E,05        I/O  5,@VAR4
[3790] B87A 58,82           BR   IODONE
[3791] B87C 06,B8,A7 CSV    CALL CSLOAD
[3792] B87F F6,0E,06        I/O  6,@VAR4
[3793] B882 D6,42,B3 IODONE CEQ  >B3,@CHAT
[3794] B885 77,EF           BS   IOAGN
[3795] B887 4B,1A           BR   LNKRTN
[3796] B889 BD,0E,4A CRUTMP DST  @FAC,@VAR4
[3797] B88C 87,10           DCLR @VAR5
[3798] B88E 87,00           DCLR @VAR0
[3799] B890 00              RTN
[3800] B891 8E,4B    CRUSET CZ   @FAC1
[3801] B893 6D,EE           BS   ERRBV
[3802] B895 CA,4A,11        CHE  >11,@FAC
[3803] B898 6D,EE           BS   ERRBV
[3804] B89A BC,04,4B        ST   @FAC1,@VARY
[3805] B89D 06,A3,6D        CALL SUBLP3       * CRU-ADDRESS
[3806] B8A0 06,B8,89        CALL CRUTMP
[3807] B8A3 BC,10,04        ST   @VARY,@VAR5
[3808] B8A6 00              RTN
[3809] B8A7 06,B8,89 CSLOAD CALL CRUTMP
[3810] B8AA 06,A3,6D        CALL SUBLP3       * ADDRESS
[3811] B8AD BD,10,4A        DST  @FAC,@VAR5
[3812] B8B0 00              RTN
[3813]               *******************************
[3814] B8B1 86,55    HVPNUM CLR  @FAC11            Select XB FLP
[3815] B8B3 0F,73           XML  XCNS
[3816] B8B5 D6,90,55        CEQ  SPACE,*FAC11      Leading space?
       B8B8 20
[3817] B8B9 58,BF           BR   HVPUTN
[3818] B8BB 90,55           INC  @FAC11            Supress space out
[3819] B8BD 92,56           DEC  @FAC12            Shorten length
[3820] B8BF 86,0C    HVPUTN CLR  @BYTES
[3821] B8C1 BC,0D,56        ST   @FAC12,@BYTES+1        Length
[3822] B8C4 0F,71           XML  GETSTR
[3823] B8C6 34,0C,B0        MOVE @BYTES,*FAC11,V*SREF   Store in VDP rollout
       B8C9 1C,90,55
[3824] B8CC BD,4E,1C        DST  @SREF,@FAC4            VDP rollout address
[3825] B8CF BD,50,0C        DST  @BYTES,@FAC6           Store length
[3826] B8D2 00              RTN
[3827]               *******************************
[3828] B8D3 06,B1,0B HPUT   CALL SPNUM1            * HPUT
[3829] B8D6 06,A2,FF HPAGIN CALL ROWCOL            Get ROW & COL
[3830] B8D9 06,A2,D6        CALL STRFCH            Get string or number
[3831] B8DC D6,4C,65        CEQ  >65,@FAC2         String?
[3832] B8DF 78,E4           BS   HPUTS             Yes
[3833] B8E1 06,B8,B1        CALL HVPNUM            No, XCNS
[3834] B8E4 8F,50    HPUTS  DCZ  @FAC6
[3835] B8E6 78,F4           BS   HPOUT
[3836] B8E8 87,4A           DCLR @FAC
[3837] B8EA 06,A3,57 HPUTLP CALL PUTLP
[3838] B8ED 06,A3,62        CALL HFMT
[3839] B8F0 93,50           DDEC @FAC6
[3840] B8F2 58,EA           BR   HPUTLP
[3841] B8F4 D6,42,B3 HPOUT  CEQ  >B3,@CHAT
[3842] B8F7 78,D6           BS   HPAGIN

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0067 
EQUATES EXEC-359
[3843] B8F9 4B,17           BR   XPTRTN
[3844]               **************************
[3845] B8FB 06,B1,0B VPUT   CALL SPNUM1            * VPUT
[3846] B8FE 06,A2,FF VPAGIN CALL ROWCOL            Get ROW & COL
[3847] B901 06,A2,D6        CALL STRFCH            Get string or number
[3848] B904 D6,4C,65        CEQ  >65,@FAC2         String?
[3849] B907 79,0C           BS   VPUTS             Yes
[3850] B909 06,B8,B1        CALL HVPNUM            No, CNS
[3851] B90C 8F,50    VPUTS  DCZ  @FAC6
[3852] B90E 79,25           BS   VPOUT
[3853] B910 87,4A           DCLR @FAC
[3854] B912 06,A3,57 VPUTLP CALL PUTLP
[3855] B915 06,A3,67        CALL VFMT
[3856] B918 93,50           DDEC @FAC6
[3857] B91A 79,25           BS   VPOUT
[3858] B91C 8E,7E           CZ   @YPT
[3859] B91E 59,12           BR   VPUTLP
[3860] B920 90,7F           INC  @XPT
[3861] B922 05,B9,12        B    VPUTLP
[3862] B925 D6,42,B3 VPOUT  CEQ  >B3,@CHAT
[3863] B928 78,FE           BS   VPAGIN
[3864] B92A 4B,17           BR   XPTRTN
[3865]               ****************************
[3866] B92C 06,A2,FF HVGETS CALL ROWCOL
[3867] B92F 06,A2,F6        CALL GETNUM
[3868] B932 CF,4A,00        DCGT >00FF,@FAC
       B935 FF
[3869] B936 6D,EE           BS   ERRBV              * BAD VALUE
[3870] B938 BD,0C,4A        DST  @FAC,@BYTES
[3871] B93B BD,54,4A        DST  @FAC,@TEMP1
[3872] B93E 0F,71           XML  GETSTR
[3873] B940 BD,12,1C        DST  @SREF,@STRPTR
[3874] B943 00              RTN
[3875]               ****************************
[3876] B944 06,B1,0B HGET   CALL SPNUM1             * HGET
[3877] B947 06,B9,2C HAGAIN CALL HVGETS
[3878] B94A 06,A3,46 LP2    CALL GETLP
[3879] B94D 06,A3,62        CALL HFMT
[3880] B950 93,54           DDEC @TEMP1
[3881] B952 59,4A           BR   LP2
[3882] B954 06,A3,1F HDONE  CALL NGOOD
[3883] B957 D6,42,B3        CEQ  >B3,@CHAT
[3884] B95A 79,47           BS   HAGAIN
[3885] B95C 4B,17           BR   XPTRTN
[3886]               **************************
[3887] B95E 06,B1,0B VGET   CALL SPNUM1              * VGET
[3888] B961 06,B9,2C VAGAIN CALL HVGETS
[3889] B964 06,A3,46 LP1    CALL GETLP
[3890] B967 06,A3,67        CALL VFMT
[3891] B96A 93,54           DDEC @TEMP1
[3892] B96C 79,77           BS   VDONE
[3893] B96E 8E,7E           CZ   @YPT
[3894] B970 59,64           BR   LP1
[3895] B972 90,7F           INC  @XPT
[3896] B974 05,B9,64        B    LP1
[3897] B977 06,A3,1F VDONE  CALL NGOOD
[3898] B97A D6,42,B3        CEQ  >B3,@CHAT
[3899] B97D 79,61           BS   VAGAIN
[3900] B97F 4B,17           BR   XPTRTN
[3901]               ***************************
[3902] B981 06,B1,0B GMOT   CALL SPNUM1              * GMOTOIN
[3903] B984 06,B1,11 GMAGN  CALL SPNUM2
[3904] B987 BE,54,02        ST   >02,@TEMP1
[3905] B98A BD,56,E4        DST  V@>0480(@SPSAL),@TEMP2

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0068 
EQUATES EXEC-359
       B98D 80,08
[3906] B98F 06,B1,BD GMO1   CALL PREPN
[3907] B992 BC,4B,56        ST   @TEMP2,@FAC+1
[3908] B995 C6,4B,7F        CH   >7F,@FAC+1
[3909] B998 59,9E           BR   GMO2
[3910] B99A 82,4B           NEG  @FAC+1
[3911] B99C 83,4A           DNEG @FAC
[3912] B99E 06,A3,41 GMO2   CALL CIFSND
[3913] B9A1 D6,54,01        CEQ  >01,@TEMP1
[3914] B9A4 79,AA           BS   GMO3
[3915] B9A6 0F,7E           XML  SPEED
[3916] B9A8 00,B3           DATA >00B3
[3917] B9AA C0,57,56 GMO3   EX   @TEMP2,@TEMP2+1
[3918] B9AD 92,54           DEC  @TEMP1
[3919] B9AF 59,8F           BR   GMO1
[3920] B9B1 D6,42,B3        CEQ  >B3,@CHAT
[3921] B9B4 79,84           BS   GMAGN
[3922] B9B6 4B,1A           BR   LNKRTN
[3923]               **************************
[3924] B9B8 06,B1,0B RMOT   CALL SPNUM1              *    RMOTION
[3925] B9BB 0F,79    RMAGN  XML  PGMCHR
[3926] B9BD D6,42,EC        CEQ  >EC,@CHAT
[3927] B9C0 59,D2           BR   NOALL
[3928] B9C2 0F,7E           XML  SPEED
[3929] B9C4 00,EC           DATA >00EC
[3930] B9C6 BF,00,00        DST  >001C,@VAR0
       B9C9 1C
[3931] B9CA BD,4A,00 NXALL  DST  @VAR0,@FAC
[3932] B9CD 06,B1,23        CALL SPNUM5
[3933] B9D0 59,E1           BR   RMALL
[3934] B9D2 BF,00,00 NOALL  DST  >0001,@VAR0
       B9D5 01
[3935] B9D6 D6,42,FD        CEQ  >FD,@CHAT
[3936] B9D9 4D,BA           BR   ERRSYN
[3937] B9DB 06,A2,E5        CALL NUMFCH
[3938] B9DE 06,B1,1D        CALL SPNUM4
[3939] B9E1 BD,54,E4 RMALL  DST  V@>0480(@SPSAL),@TEMP1
       B9E4 80,08
[3940] B9E6 BE,56,02        ST   >02,@TEMP2
[3941] B9E9 8E,54    RMOTLP CZ   @TEMP1
[3942] B9EB 79,FD           BS   J2
[3943] B9ED D6,54,80        CEQ  >80,@TEMP1
[3944] B9F0 7A,09           BS   J3
[3945] B9F2 C6,54,7F        CH   >7F,@TEMP1
[3946] B9F5 79,FB           BS   J1
[3947] B9F7 82,54           NEG  @TEMP1
[3948] B9F9 59,FD           BR   J2
[3949] B9FB 80,54    J1     ABS  @TEMP1
[3950] B9FD C0,55,54 J2     EX   @TEMP1,@TEMP1+1
[3951] BA00 92,56           DEC  @TEMP2
[3952] BA02 59,E9           BR   RMOTLP
[3953] BA04 BD,E4,80        DST  @TEMP1,V@>0480(@SPSAL)
       BA07 08,54
[3954] BA09 93,00    J3     DDEC @VAR0
[3955] BA0B 59,CA           BR   NXALL
[3956] BA0D D6,42,B3        CEQ  >B3,@CHAT
[3957] BA10 79,BB           BS   RMAGN
[3958] BA12 4B,1A           BR   LNKRTN
[3959]               *****************************************
[3960] BA14 0F,7E    S1ET9F XML  SPEED  * CHECK FROM
[3961] BA16 02,1E           DATA >021E  * 30 TO 159
[3962] BA18 00,9F           DATA >009F  *
[3963] BA1A 00              RTN         *
[3964]               *****************************************

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0069 
EQUATES EXEC-359
[3965] BA1B 06,B1,0B INV    CALL SPNUM1            * INVERSE(CHAR#)
[3966] BA1E 0F,79    INVAGN XML  PGMCHR
[3967] BA20 D6,42,EC        CEQ  >EC,@CHAT
[3968] BA23 5A,37           BR   INOALL
[3969] BA25 0F,7E           XML  SPEED
[3970] BA27 00,EC           DATA >00EC
[3971] BA29 BF,4A,00        DST  >001E,@FAC
       BA2C 1E
[3972] BA2D E3,4A,00        DSLL 3,@FAC
       BA30 03
[3973] BA31 BF,54,01        DST  >01C8,@TEMP1
       BA34 C8
[3974] BA35 5A,45           BR   INVLP
[3975] BA37 0F,74    INOALL XML  PARSE
[3976] BA39 B6              BYTE >B6
[3977] BA3A 06,BA,14        CALL S1ET9F
[3978] BA3D E3,4A,00        DSLL 3,@FAC
       BA40 03
[3979] BA41 BF,54,00        DST  >0004,@TEMP1
       BA44 04
[3980] BA45 85,E3,00 INVLP  DINV V@>0300(@FAC)
       BA48 4A
[3981] BA49 A3,4A,00        DADD >0002,@FAC
       BA4C 02
[3982] BA4D 93,54           DDEC @TEMP1
[3983] BA4F 5A,45           BR   INVLP
[3984] BA51 D6,42,B3 INVNOK CEQ  >B3,@CHAT
[3985] BA54 7A,1E           BS   INVAGN
[3986] BA56 4B,1A           BR   LNKRTN
[3987]               *****************************************
[3988] BA58 06,A2,D6 SSDSLL CALL STRFCH
[3989] BA5B 06,BA,14        CALL S1ET9F
[3990] BA5E E3,4A,00        DSLL 3,@FAC
       BA61 03
[3991] BA62 00              RTN
[3992]               *****************************************
[3993] BA63 06,B1,0B SWCHR  CALL SPNUM1      * SWAPCHAR(CHAR#,CHAR#)
[3994] BA66 06,BA,58 SWCHAG CALL SSDSLL
[3995] BA69 BD,0E,4A        DST  @FAC,@VAR4
[3996] BA6C D6,42,B3        CEQ  >B3,@CHAT
[3997] BA6F 4D,BA           BR   ERRSYN
[3998] BA71 06,BA,58        CALL SSDSLL
[3999] BA74 BD,10,4A        DST  @FAC,@VAR5
[4000] BA77 35,00,08        MOVE 8,V@>0300(@VAR4),@FAC
       BA7A 4A,E3,00
       BA7D 0E
[4001] BA7E 35,00,08        MOVE 8,V@>0300(@VAR5),V@>0300(@VAR4)
       BA81 E3,00,0E
       BA84 E3,00,10
[4002] BA87 35,00,08        MOVE 8,@FAC,V@>0300(@VAR5)
       BA8A E3,00,10
       BA8D 4A
[4003] BA8E D6,42,B3        CEQ  >B3,@CHAT
[4004] BA91 7A,66           BS   SWCHAG
[4005] BA93 4B,1A           BR   LNKRTN
[4006]               ******************************************
[4007] BA95 06,B1,0B DUPCHR CALL SPNUM1      * DUPCHAR(CHAR#,CHAR#)
[4008] BA98 06,BA,58 DCHAGN CALL SSDSLL
[4009] BA9B BD,0E,4A        DST  @FAC,@VAR4
[4010] BA9E D6,42,B3        CEQ  >B3,@CHAT
[4011] BAA1 4D,BA           BR   ERRSYN
[4012] BAA3 06,BA,58        CALL SSDSLL
[4013] BAA6 35,00,08        MOVE 8,V@>0300(@VAR4),V@>0300(@FAC)
       BAA9 E3,00,4A

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0070 
EQUATES EXEC-359
       BAAC E3,00,0E
[4014] BAAF D6,42,B3        CEQ  >B3,@CHAT
[4015] BAB2 7A,98           BS   DCHAGN
[4016] BAB4 4B,1A           BR   LNKRTN
[4017]               ******************************************
[4018] BAB6 0F,7E    S00T10 XML  SPEED  * CHECK FROM
[4019] BAB8 02,00           DATA >0200  * 0 TO 16
[4020] BABA 00,10           DATA >0010  *
[4021] BABC 00              RTN         *
[4022]               ******************************************
[4023] BABD 0F,7E    SWCLR  XML  SPEED      * SWAPCOLOR(SET#,SET#)
[4024] BABF 00,B7           DATA >00B7
[4025] BAC1 D6,42,FD SCOL10 CEQ  >FD,@CHAT
[4026] BAC4 5A,F1           BR   SCOL20
[4027] BAC6 06,B1,18        CALL SPNUM3
[4028] BAC9 BC,0E,E0        ST   V@>0003(@FAC),@VAR4
       BACC 03,4A
[4029] BACE BD,10,4A        DST  @FAC,@VAR5
[4030] BAD1 D6,42,FD        CEQ  >FD,@CHAT
[4031] BAD4 4D,BA           BR   ERRSYN
[4032] BAD6 06,A2,D6        CALL STRFCH
[4033] BAD9 06,B1,1D        CALL SPNUM4
[4034] BADC BC,E0,03        ST   V@>0003(@FAC),V@>0003(@VAR5)
       BADF 10,E0,03
       BAE2 4A
[4035] BAE3 BC,E0,03        ST   @VAR4,V@>0003(@FAC)
       BAE6 4A,0E
[4036] BAE8 D6,42,B3        CEQ  >B3,@CHAT
[4037] BAEB 4B,1A           BR   LNKRTN
[4038] BAED 0F,79           XML  PGMCHR
[4039] BAEF 5A,C1           BR   SCOL10
[4040] BAF1 0F,7E    SCOL20 XML  SPEED
[4041] BAF3 01              BYTE >01
[4042] BAF4 06,BA,B6        CALL S00T10
[4043] BAF7 A3,4A,08        DADD >080F,@FAC
       BAFA 0F
[4044] BAFB BD,0E,4A        DST  @FAC,@VAR4
[4045] BAFE 0F,74           XML  PARSE
[4046] BB00 B6              BYTE >B6
[4047] BB01 06,BA,B6        CALL S00T10
[4048] BB04 A3,4A,08        DADD >080F,@FAC
       BB07 0F
[4049] BB08 BC,00,B0        ST   V*FAC,@VAR0
       BB0B 4A
[4050] BB0C BC,B0,4A        ST   V*VAR4,V*FAC
       BB0F B0,0E
[4051] BB11 BC,B0,0E        ST   @VAR0,V*VAR4
       BB14 00
[4052] BB15 D6,42,B3        CEQ  >B3,@CHAT
[4053] BB18 4B,1A           BR   LNKRTN
[4054] BB1A 0F,79           XML  PGMCHR
[4055] BB1C 5A,F1           BR   SCOL20
[4056]               ******************************************
[4057] BB1E 0F,7E    DUPCLR XML  SPEED        * DUPCOLOR(SET#,SET#)
[4058] BB20 00,B7           DATA >00B7
[4059] BB22 D6,42,FD DCOL10 CEQ  >FD,@CHAT
[4060] BB25 5B,48           BR   DCOL20
[4061] BB27 06,B1,18        CALL SPNUM3
[4062] BB2A BC,0E,E0        ST   V@>0003(@FAC),@VAR4
       BB2D 03,4A
[4063] BB2F D6,42,FD        CEQ  >FD,@CHAT
[4064] BB32 4D,BA           BR   ERRSYN
[4065] BB34 06,A2,D6        CALL STRFCH
[4066] BB37 06,B1,1D        CALL SPNUM4

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0071 
EQUATES EXEC-359
[4067] BB3A BC,E0,03        ST   @VAR4,V@>0003(@FAC)
       BB3D 4A,0E
[4068] BB3F D6,42,B3        CEQ  >B3,@CHAT
[4069] BB42 4B,1A           BR   LNKRTN
[4070] BB44 0F,79           XML  PGMCHR
[4071] BB46 5B,22           BR   DCOL10
[4072] BB48 0F,7E    DCOL20 XML  SPEED
[4073] BB4A 01              BYTE >01
[4074] BB4B 06,BA,B6        CALL S00T10
[4075] BB4E A3,4A,08        DADD >080F,@FAC
       BB51 0F
[4076] BB52 BC,00,B0        ST   V*FAC,@VAR0
       BB55 4A
[4077] BB56 0F,74           XML  PARSE
[4078] BB58 B6              BYTE >B6
[4079] BB59 06,BA,B6        CALL S00T10
[4080] BB5C A3,4A,08        DADD >080F,@FAC
       BB5F 0F
[4081] BB60 BC,B0,4A        ST   @VAR0,V*FAC
       BB63 00
[4082] BB64 D6,42,B3        CEQ  >B3,@CHAT
[4083] BB67 4B,1A           BR   LNKRTN
[4084] BB69 0F,79           XML  PGMCHR
[4085] BB6B 5B,48           BR   DCOL20
[4086]               *******************************************************
[4087]               * CPU PROGRAM FOR >8300 SCATCH PAD SUBROUTINE EXECUTE *
[4088]               *******************************************************
[4089]               *                          AORG >8300
[4090] BB6D 83,02    CPUPGM DATA >8302 * CPUPGM DATA >8302  First address. *
[4091] BB6F 04,20           DATA >0420 *        BLWP >834A  Switch contex  *
[4092] BB71 83,4A           DATA >834A *                    FAC not used   *
[4093] BB73 04,E0           DATA >04E0 *        CLR  @>837C Clear for GPL  *
[4094] BB75 83,7C           DATA >837C *                                   *
[4095] BB77 04,5B           DATA >045B *        RT          Return to GPL. *
[4096]                                 *        END                        *
[4097]               *******************************************************
[4098] BB79 06,B1,0B EXECUT CALL SPNUM1
[4099] BB7C 06,A3,6D EXAGN  CALL SUBLP3
[4100] BB7F 35,00,0C        MOVE 12,@VAR0,V@VROAZ   Save CPU values
       BB82 A3,C0,00
[4101] BB85 31,00,0C        MOVE 12,G@CPUPGM,@VAR0  Load PGM
       BB88 00,BB,6D
[4102] BB8B BD,04,4A        DST  @FAC,@VARY         Load address    
[4103] BB8E 0F,F0           XML  >F0                Execute address 
[4104] BB90 35,00,0C        MOVE 12,V@VROAZ,@VAR0   Restore CPU values
       BB93 00,A3,C0
[4105] BB96 D6,42,B3        CEQ  >B3,@CHAT          Comma?
[4106] BB99 7B,7C           BS   EXAGN              Repeat
[4107] BB9B 4B,1A           BR   LNKRTN
[4108]               ***********************************************************
[4109] BB9D BB,A9    LINKST DATA LINKSU
[4110] BB9F 04,53,49        STRI 'SIZE'            SIZE
       BBA2 5A,45
[4111] BBA4 BB,A6           DATA $+2
[4112] BBA6 05,65,C9        B    SZSIZE
[4113] BBA9 BB,B9    LINKSU DATA LINKSV
[4114] BBAB 06,43,4C        STRI 'CLSALL'          CLSALL
       BBAE 53,41,4C
       BBB1 4C
[4115] BBB2 BB,B4           DATA $+2
[4116] BBB4 06,80,12        CALL CLSALL            Close all open files
[4117] BBB7 4B,1E           BR   LNKRT2
[4118] BBB9 BB,C5    LINKSV DATA LINKSW
[4119] BBBB 03,42,59        STRI 'BYE'             BYE

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0072 
EQUATES EXEC-359
       BBBE 45
[4120] BBBF BB,C1           DATA $+2
[4121] BBC1 06,80,12        CALL CLSALL            Close all open files
[4122] BBC4 0B              EXIT
[4123] BBC5 BB,D6    LINKSW DATA LINKSX
[4124] BBC7 03,4E,45        STRI 'NEW'             NEW
       BBCA 57
[4125] BBCB BB,CD           DATA $+2
[4126] BBCD 86,A3,71 RXBNEW CLR  V@LODFLG          Clear AUTOLOAD flag
[4127] BBD0 06,80,12        CALL CLSALL
[4128] BBD3 05,63,A5        B    SZNEW
[4129] BBD6 BC,12    LINKSX DATA LINKSY
[4130] BBD8 04,42,49        STRI 'BIAS'            BIAS
       BBDB 41,53
[4131] BBDD BB,DF           DATA $+2
[4132] BBDF 06,B1,0B        CALL SPNUM1            (
[4133] BBE2 06,A2,F6 BIASAG CALL GETNUM            Get number 
[4134] BBE5 BD,00,4A        DST  @FAC,@VAR0        Save number
[4135] BBE8 06,A2,DC        CALL STRGET            Get string
[4136] BBEB BD,04,4E        DST  @FAC4,@VARY       Save location
[4137] BBEE BD,06,50        DST  @FAC6,@VARY2      Save length  
[4138] BBF1 BC,4B,B0 BIASLP ST   V*VARY,@FAC1      * Character.
       BBF4 04
[4139] BBF5 8F,00           DCZ  @VAR0             0?
[4140] BBF7 7B,FE           BS   BIASM             Yes.
[4141] BBF9 A2,4B,60        ADD  96,@FAC1          ADD OFFSET
[4142] BBFC 5C,01           BR   BIASSV
[4143] BBFE A6,4B,60 BIASM  SUB  96,@FAC1          MINUS OFFSET
[4144] BC01 BC,B0,04 BIASSV ST   @FAC1,V*VARY      Store it 
       BC04 4B
[4145] BC05 91,04           DINC @VARY             Next one in string
[4146] BC07 93,06           DDEC @VARY2            Counter-1
[4147] BC09 5B,F1           BR   BIASLP            Loop till zero
[4148] BC0B D6,42,B3        CEQ  >B3,@CHAT         ,?
[4149] BC0E 7B,E2           BS   BIASAG            Yes 
[4150] BC10 4B,1A           BR   LNKRTN            Done return
[4151] BC12 BC,1F    LINKSY DATA LINKSZ
[4152] BC14 04,45,41        STRI 'EALR'            EALR
       BC17 4C,52
[4153] BC19 BC,1B           DATA $+2
[4154] BC1B 06,BC,41        CALL EASAVE
[4155] BC1E 33              BYTE >33
[4156] BC1F BC,2D    LINKSZ DATA LINKT1
[4157] BC21 05,45,41        STRI 'EAPGM'           EAPGM
       BC24 50,47,4D
[4158] BC27 BC,29           DATA $+2
[4159] BC29 06,BC,41        CALL EASAVE            Get path
[4160] BC2C 35              BYTE >35
[4161] BC2D BC,3A    LINKT1 DATA LINKT2
[4162] BC2F 04,45,41        STRI 'EAED'            EAED
       BC32 45,44
[4163] BC34 BC,36           DATA $+2
[4164] BC36 06,BC,41 XEAED  CALL EASAVE            Get path
[4165] BC39 31              BYTE >31
[4166] BC3A BC,67    LINKT2 DATA LINKT3
[4167] BC3C 02,45,41        STRI 'EA'              EA menu
[4168] BC3F BC,61           DATA EAMENU
[4169] BC41 06,B1,0B EASAVE CALL SPNUM1            ( 
[4170] BC44 06,A2,DC        CALL STRGET            Get path
[4171] BC47 BC,AF,22        ST   @FAC,V@>2256      Save length
       BC4A 56,4A
[4172] BC4C A2,AF,22        ADD  1,V@>2256         Length+1
       BC4F 56,01
[4173] BC51 34,50,AF        MOVE @FAC6,V@0(@FAC4),V@>2257 Load buffer

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0073 
EQUATES EXEC-359
       BC54 22,57,E0
       BC57 00,4E
[4174] BC59 BE,EF,22        ST   >0D,V@>2257(@FAC6) Put ENTER key at end
       BC5C 57,50,0D
[4175] BC5F 88,42           FETCH @CHAT            Get character
[4176] BC61 06,80,12 EAMENU CALL CLSALL            Close all open files
[4177] BC64 05,E0,25        B    GE025             Got to EA CART
[4178] BC67 BC,78    LINKT3 DATA LINKT4
[4179] BC69 02,58,42        STRI 'XB'              XB menu
[4180] BC6C BC,6E           DATA $+2
[4181] BC6E BE,AF,35 XBMENU ST   >FF,V@>35D7       SET RXB MENU Flag
       BC71 D7,FF
[4182] BC73 06,80,12        CALL CLSALL            Close all open files
[4183] BC76 5C,C3           BR   RXBRUN            Run it
[4184] BC78 BC,80    LINKT4 DATA LINKT5             
[4185] BC7A 03,52,55        STRI 'RUN'             RUN(pathname) duplicat XBPGM
       BC7D 4E
[4186] BC7E BC,8A           DATA XBPGM
[4187] BC80 BC,C6    LINKT5 DATA LINKT6
[4188] BC82 05,58,42        STRI 'XBPGM'           XBPGM
       BC85 50,47,4D
[4189] BC88 BC,8A           DATA $+2
[4190] BC8A 06,B1,0B XBPGM  CALL SPNUM1
[4191] BC8D 06,80,12        CALL CLSALL            Close all open files
[4192] BC90 06,A2,DC        CALL STRGET            Get string
[4193] BC93 8F,50           DCZ  @FAC6             Zero string length?
[4194] BC95 7C,BB           BS   RXBXBP            Yes
[4195] BC97 86,AF,22        CLR  V@>2254           Clear buffer 
       BC9A 54
[4196] BC9B 35,00,32        MOVE 50,V@>2254,V@>2255 Ripple clear
       BC9E AF,22,55
       BCA1 AF,22,54
[4197] BCA4 BF,AF,22        DST  >994A,V@>2254     Set flag 
       BCA7 54,99,4A
[4198] BCAA BC,AF,22        ST   @FAC7,V@>2256     Save length byte
       BCAD 56,51
[4199] BCAF 34,50,AF        MOVE @FAC6,V@0(@FAC4),V@>2257 Save string
       BCB2 22,57,E0
       BCB5 00,4E
[4200] BCB7 86,AF,35        CLR  V@>35D7           Clear RXB MENU Flag
       BCBA D7
[4201] BCBB D6,42,B3 RXBXBP CEQ  >B3,@CHAT         Comma?
[4202] BCBE 5C,C3           BR   RXBRUN            No
[4203] BCC0 06,BC,DB        CALL RXBFIL            Set files
[4204] BCC3 05,63,72 RXBRUN B    TOPLEV            RUN IT
[4205] BCC6 C0,10    LINKT6 DATA >C010
[4206] BCC8 05,46,49        STRI 'FILES'           FILES
       BCCB 4C,45,53
[4207] BCCE BC,D0           DATA $+2
[4208] BCD0 06,B1,0B        CALL SPNUM1            (
[4209] BCD3 06,80,12        CALL CLSALL            Close all open files
[4210] BCD6 06,BC,DB        CALL RXBFIL            Set files
[4211] BCD9 5B,CD           BR   RXBNEW            Go do a NEW
[4212] BCDB 06,A3,6D RXBFIL CALL SUBLP3            Get Files value
[4213] BCDE 8F,4A           DCZ  @FAC              Zero?
[4214] BCE0 6D,EE           BS   ERRBV             Yes, BAD VALUE error
[4215] BCE2 CB,4A,00        DCHE 16,@FAC           16 or more to high
       BCE5 10
[4216] BCE6 6D,EE           BS   ERRBV             Yes, BAD VALUE error
[4217] BCE8 D6,42,B6        CEQ  RPARZ,@CHAT       )?
[4218] BCEB 4D,BA           BR   ERRSYN            SYNTAX ERROR 
[4219] BCED 0F,79           XML  PGMCHR            Skip )
[4220] BCEF 87,4C           DCLR @FAC2             Clear         
[4221] BCF1 BC,4C,4B        ST   @FAC1,@FAC2       Load file value

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0074 
EQUATES EXEC-359
[4222] BCF4 BF,A3,C0        DST  >0116,V@VROAZ     Set files buffer space
       BCF7 01,16
[4223] BCF9 06,BE,2A        CALL DSKDSR           
[4224] BCFC 00              RTN
[4225]               ***********************************************************
[4226]               * CALL KEY(string,keyunit,Nvarible,Nvariable...)
[4227]               * CALL KEY(keyunit,Nvariable,Nvarible...)
[4228]               ***********************************************************
[4229] BCFD 06,AC,26 ZKEY   CALL KEY               Get key
[4230] BD00 D6,42,B3        CEQ  COMMAZ,@CHAT
[4231] BD03 7C,FD           BS   ZKEY
[4232] BD05 4B,1A           BR   LNKRTN
[4233]               ***********************************************************
[4234] BD07 BC,00,4B KEYJOY ST   @FAC1,@VAR0       Keyboard selection
[4235] BD0A 06,A9,DD        CALL NUMVAR            Get variable for key-code
[4236] BD0D D6,42,B3        CEQ  COMMAZ,@CHAT      If not comma - error
[4237] BD10 4D,BA           BR   ERRSYN            SYNTAX error
[4238] BD12 0F,79           XML  PGMCHR            Get next character
[4239] BD14 06,A9,DD        CALL NUMVAR            Get variable for key-status
[4240] BD17 BC,74,00        ST   @VAR0,@KEYBD      Keyboard selection
[4241] BD1A 31,00,08        MOVE 8,G@FLT1,@FAC     Set up float
       BD1D 4A,A3,F3
[4242] BD20 06,BD,27        CALL KEYSTR            * RXB KEY STRING COMPARISON *
[4243] BD23 BC,04,7C        ST   @STATUS,@VARY     Save stutus
[4244] BD26 01              RTNC                   Return scan condition co
[4245]               ***********************************************************
[4246] BD27 D7,10,99 KEYSTR DCEQ >994A,@TOPSTK     Flag set?
       BD2A 4A
[4247] BD2B 5D,5B           BR   RSCAN3            No.
[4248] BD2D BD,08,04        DST  @VARY,@VARC       String address.
[4249] BD30 BD,02,06        DST  @CCPPTR,@ACCUM    Copy length.
[4250] BD33 86,68           CLR  @BYTE3            Zero out counter
[4251] BD35 D6,66,9B RSCAN  CEQ  ONZ,@BYTE1        ON flag?
[4252] BD38 5D,3E           BR   RSCAN0            No
[4253] BD3A 03              SCAN                   Get a key
[4254] BD3B 05,BD,41        B    RSCAN1            Jump past normal KEY
[4255] BD3E 03       RSCAN0 SCAN                   Any key?
[4256] BD3F 5D,3E           BR   RSCAN0            No.
[4257] BD41 8F,06    RSCAN1 DCZ  @CCPPTR           Length 0?
[4258] BD43 7D,5C           BS   RSCAN4            Yes.
[4259] BD45 90,68    RSCAN2 INC  @BYTE3            Counter +1
[4260] BD47 D4,75,B0        CEQ  V*VARC,@RKEY      Same?
       BD4A 08
[4261] BD4B 7D,61           BS   RSCAN5            Yes.
[4262] BD4D 91,08           DINC @VARC             Address +1
[4263] BD4F 93,02           DDEC @ACCUM            Length -1
[4264] BD51 5D,45           BR   RSCAN2            No matcth.
[4265] BD53 D6,66,9B        CEQ  ONZ,@BYTE1        ON flag?
[4266] BD56 7D,5C           BS   RSCAN4            Yes
[4267] BD58 05,BD,27        B    KEYSTR            Restart.
[4268] BD5B 03       RSCAN3 SCAN                   Normal key scan.
[4269] BD5C 86,74    RSCAN4 CLR  @KEYBD            Clear key unit
[4270] BD5E 87,10           DCLR @TOPSTK           Clear flag.
[4271] BD60 01              RTNC                   Return save condition
[4272] BD61 06,BD,5C RSCAN5 CALL RSCAN4
[4273] BD64 D4,00,00        CEQ  @VAR0,@VAR0       Force condition bit on
[4274] BD67 01              RTNC                   Return save condition
[4275]               ***********************************************************
[4276]               * CALL ONKEY(string,keyunit,variable,variable)
[4277]               * GOTO line#,line#,line#...
[4278]               ***********************************************************
[4279] BD68 BE,66,9B ZONKEY ST   ONZ,@BYTE1
[4280] BD6B 8E,44           CZ   @PRGFLG           Program mode?
[4281] BD6D 6D,E6           BS   ERRLNF            ERROR LINE NOT FOUND

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0075 
EQUATES EXEC-359
[4282] BD6F 06,AC,26        CALL KEY               Get normal key,status
[4283] BD72 8E,04           CZ   @VARY             Was a key pressed?
[4284] BD74 5D,78           BR   GOTON0            No ONZ flag stays set
[4285] BD76 86,66           CLR  @BYTE1            Clear ONZ flag
[4286] BD78 D6,42,B6 GOTON0 CEQ  RPARZ,@CHAT       )
[4287] BD7B 4D,BA           BR   ERRSYN            SYNTAX ERROR
[4288] BD7D 0F,79           XML  PGMCHR            Skip )
[4289] BD7F D6,42,86        CEQ  GOTOZ,@CHAT       GOTO flag?
[4290] BD82 4D,BA           BR   ERRSYN            SYNTAX ERROR
[4291] BD84 86,67           CLR  @BYTE2            Zero out Counter
[4292] BD86 90,67    ONLP   INC  @BYTE2            Counter +1
[4293] BD88 0F,79           XML  PGMCHR            Skip GO
[4294] BD8A D6,42,C9        CEQ  LNZ,@CHAT         Line# token?
[4295] BD8D 4D,BA           BR   ERRSYN            SYNTAX ERROR
[4296] BD8F 0F,79           XML  PGMCHR            Skip line# token
[4297] BD91 BC,4A,42        ST   @CHAT,@FAC        Store high byte line#
[4298] BD94 0F,79           XML  PGMCHR            Skip high byte line#
[4299] BD96 BC,4B,42        ST   @CHAT,@FAC1       Store low byte line#
[4300] BD99 0F,79           XML  PGMCHR            Skip low byte line#
[4301] BD9B D4,67,68        CEQ  @BYTE3,@BYTE2     $ counter = line# counter
[4302] BD9E 5D,A3           BR   ONKEY1            No
[4303] BDA0 BD,04,4A        DST  @FAC,@VARY        Save line#
[4304] BDA3 D6,42,B3 ONKEY1 CEQ  COMMAZ,@CHAT      ,?
[4305] BDA6 7D,86           BS   ONLP              Yes, keep going
[4306] BDA8 BD,4A,04        DST  @VARY,@FAC        Get saved line#
[4307] BDAB D6,66,9B        CEQ  ONZ,@BYTE1        ONZ flag?
[4308] BDAE 7D,B3           BS   GKEY1             Yes, load line#
[4309] BDB0 06,00,12        CALL RETURN            Return to XB
[4310]               **********************************************************
[4311] BDB3 BD,4C,32 GKEY1  DST  @ENLN,@FAC2        Get last address
[4312] BDB6 A7,4C,00        DSUB 3,@FAC2            Point to first LINE#
       BDB9 03
[4313] BDBA 06,80,2E GKEY2  CALL GRSUB3             Read from VDP/RAM
[4314] BDBD 4C              BYTE FAC2
[4315] BDBE D5,4A,58        DCEQ @EEE1,@FAC         Same?
[4316] BDC1 7D,CE           BS   GKEY3              Yes, found line#
[4317] BDC3 C5,4C,30        DCH  @STLN,@FAC2        No line# left
[4318] BDC6 4D,E6           BR   ERRLNF             ERROR LINE NOT FOUND
[4319] BDC8 A7,4C,00        DSUB 4,@FAC2            Next LINE#
       BDCB 04
[4320] BDCC 5D,BA           BR   GKEY2              Loop
[4321] BDCE BD,2E,4C GKEY3  DST  @FAC2,@EXTRAM      Got LINE#
[4322] BDD1 A3,2E,00        DADD 4,@EXTRAM          Point to begining of line
       BDD4 04
[4323] BDD5 95,2E           DINCT @EXTRAM           Point to ADDRESS
[4324] BDD7 BD,2C,2E        DST  @EXTRAM,@PGMPTR    Set pointer to line to run
[4325] BDDA 95,2C           DINCT @PGMPTR           Point to tokens
[4326] BDDC 06,00,12        CALL RETURN             Return to XB
[4327]               **********************************************************
[4328]               *                  SUBPROGRAM FOR 'JOYSTICK'
[4329]               **********************************************************
[4330] BDDF 06,BE,A6 JOYST  CALL SPAR              KEY UNIT
[4331]               * RXB PATCH LABEL ************
[4332] BDE2 0F,7E    JOYRPT XML  SPEED             Insure in range
[4333] BDE4 02              BYTE RANGE          *   of 1 - 4
[4334] BDE5 01              BYTE 1
[4335] BDE6 00,04           DATA 4
[4336]               *                             GET VARIABLES FOR X, Y
[4337]               *                              AND SCAN KEYBOARD
[4338] BDE8 BC,00,4B        ST   @FAC1,@VAR0       Keyboard selection
[4339] BDEB 06,A9,DD        CALL NUMVAR            Get variable for key-code
[4340] BDEE D6,42,B3        CEQ  COMMAZ,@CHAT      If not comma - error
[4341] BDF1 4D,BA           BR   ERRSYN
[4342] BDF3 0F,79           XML  PGMCHR            Get next character

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0076 
EQUATES EXEC-359
[4343] BDF5 06,A9,DD        CALL NUMVAR            Get variable for key-status
[4344] BDF8 BC,74,00        ST   @VAR0,@KEYBD      Keyboard selection
[4345] BDFB 31,00,08        MOVE 8,G@FLT1,@FAC     Set up float
       BDFE 4A,A3,F3
[4346] BE01 03              SCAN                   SCAN the keyboard
[4347] BE02 86,74           CLR  @KEYBD            Clear the code(No affect on s
[4348] BE04 BC,00,76        ST   @JOYY,@VAR0       JOYSTICK Y POSITION
[4349] BE07 06,A9,AA        CALL JOYXY             -4 to +4
[4350] BE0A BF,4A,40        DST  >4001,@FAC        Re-store F.P. 1 in FAC
       BE0D 01
[4351] BE0E BC,00,77        ST   @JOYX,@VAR0       JOYSTICK X POSITION
[4352] BE11 06,A9,AA        CALL JOYXY             -4 to +4
[4353] BE14 00              RTN
[4354]               ***********************************************************
[4355] BE15 06,BD,DF ZJOYST CALL JOYST
[4356] BE18 D6,42,B3 JOYAGN CEQ  COMMAZ,@CHAT
[4357] BE1B 4B,1A           BR   LNKRTN
[4358] BE1D 06,BE,CD        CALL CPAR2
[4359] BE20 06,BD,E2        CALL JOYRPT
[4360] BE23 5E,18           BR   JOYAGN
[4361]               ***********************************************************
[4362] BE25 00       SUBRTN RTN
[4363]               ***************************
[4364] BE26 06,6A,84 ERRFE  CALL ERRZZ         *
[4365] BE29 22              BYTE 34            *
[4366] BE2A CB,00,01 DSKDSR DCHE 256,@VAR0     *
       BE2D 00
[4367] BE2E 5E,35           BR   DSRDSS        *
[4368] BE30 A2,8F,80        ADD  >10,@VROAZ+1  *
       BE33 C1,10
[4369] BE35 BF,56,03 DSRDSS DST  VROAZ,@FAC12  *
       BE38 C0
[4370] BE39 06,00,10        CALL LINK          *
[4371] BE3C 0A              BYTE >0A           *
[4372] BE3D BC,0B,7C        ST   @ERCODE,@VAR2 *
[4373] BE40 E6,50,04        SRL  4,@FAC6       *
[4374] BE43 8E,50           CZ   @FAC6         *
[4375] BE45 5E,26           BR   ERRFE         *
[4376] BE47 D6,0B,20        CEQ  >20,@VAR2     *
[4377] BE4A 7E,26           BS   ERRFE         *
[4378] BE4C 00              RTN                *
[4379]               ***************************
[4380]               * GCHAR PATCH FOR COMMA
[4381] BE4D D6,42,B3 GCHARA CEQ  COMMAZ,@CHAT      ,?
[4382] BE50 68,FA           BS   GCHAR
[4383] BE52 4B,17           BR   XPTRTN
[4384]               ***********************************************************
[4385]               * MOTION PATCH for GO and STOP
[4386] BE54 0F,79    SPGS   XML  PGMCHR            ( or ,
[4387] BE56 D6,42,EC        CEQ  ALLZ,@CHAT        ALL?
[4388] BE59 5E,81           BR   SPGS1             No.
[4389] BE5B 0F,79           XML  PGMCHR            Skip ALL
[4390] BE5D 0F,79           XML  PGMCHR            Skip ,
[4391] BE5F BF,4A,00        DST  1,@FAC            First sprite
       BE62 01
[4392] BE63 06,B1,23        CALL SPNUM5            Get sprite table
[4393] BE66 06,B1,64        CALL SPMOVE            Store velocity
[4394] BE69 BE,4A,1C        ST   28,@FAC           Last sprite
[4395] BE6C 87,00           DCLR @VAR0             Index
[4396] BE6E 35,00,02 SPGSA  MOVE 2,V@>0780,V@>0780(@VAR0)
       BE71 E7,80,00
       BE74 A7,80
[4397] BE76 A3,00,00        DADD 4,@VAR0           Index +4
       BE79 04

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0077 
EQUATES EXEC-359
[4398] BE7A 92,4A           DEC  @FAC              Sprite -1
[4399] BE7C 5E,6E           BR   SPGSA             Done?
[4400] BE7E 05,B0,3B        B    SPRMV4            No.
[4401] BE81 D6,42,FD SPGS1  CEQ  NUMBEZ,@CHAT      #?
[4402] BE84 5E,8C           BR   SPGS2             No.
[4403] BE86 06,B1,13        CALL SPNUM6            Standard routine.
[4404] BE89 05,B0,38        B    SPRMV3
[4405] BE8C D6,42,85 SPGS2  CEQ  GOZ,@CHAT         GO?
[4406] BE8F 5E,98           BR   SPGS3             No.
[4407] BE91 B2,80,C2        AND  >BF,@>83C2        GO!!!
       BE94 BF
[4408] BE95 05,BE,A1        B    SPGS4             Done.
[4409] BE98 D6,42,98 SPGS3  CEQ  STOPZ,@CHAT       STOP?
[4410] BE9B 4D,BA           BR   ERRSYN            No
[4411] BE9D B6,80,C2        OR   >40,@>83C2        STOP!!!
       BEA0 40
[4412] BEA1 0F,79    SPGS4  XML  PGMCHR            Skip GO or STOP
[4413] BEA3 05,B0,3B        B    SPRMV4
[4414]               ***********************************************************
[4415] BEA6 D6,42,B7 SPAR   CEQ  LPARZ,@CHAT       (?
[4416] BEA9 7E,B0           BS   SPAR1             Yes.
[4417] BEAB D6,42,B3        CEQ  COMMAZ,@CHAT      ,?
[4418] BEAE 4D,BA           BR   ERRSYN            No.
[4419] BEB0 0F,79    SPAR1  XML  PGMCHR            Skip ( or ,
[4420] BEB2 0F,74           XML  PARSE             Get string or value.
[4421] BEB4 B6              BYTE RPARZ
[4422] BEB5 D6,4C,65        CEQ  >65,@FAC2         String?
[4423] BEB8 5E,C8           BR   SPAR2             No.
[4424] BEBA BD,04,4E        DST  @FAC4,@VARY       Save address.
[4425] BEBD BD,06,50        DST  @FAC6,@VARY2      Save length.
[4426] BEC0 BF,10,99        DST  >994A,@TOPSTK     Set flag.
       BEC3 4A
[4427] BEC4 06,AC,89        CALL LPAR
[4428] BEC7 00              RTN
[4429] BEC8 0F,7E    SPAR2  XML  SPEED
[4430] BECA 00              BYTE SYNCHK
[4431] BECB B3              BYTE COMMAZ
[4432] BECC 00              RTN
[4433]               *****************************
[4434] BECD 0F,7E    CPAR2  XML  SPEED           * Similar to LPAR
[4435] BECF 00,B3           DATA COMMAZ          * Syntax check ,
[4436] BED1 4C,98           BR   GAC35           * Parse value
[4437]               *****************************
[4438] BED3 06,AF,E5 ZSCOI  CALL SPRCOI       *    COINC
[4439] BED6 D6,42,B3 COINLP CEQ  >B3,@CHAT    *
[4440] BED9 4B,1A           BR   LNKRTN       *
[4441] BEDB 0F,79           XML  PGMCHR       *
[4442] BEDD 06,AF,FB        CALL GAF56        *
[4443] BEE0 5E,D6           BR   COINLP       *
[4444]               **************************
[4445] BEE2 06,B1,BD NR     CALL PREPN        *
[4446] BEE5 0F,7C    AR     XML  ASSGNV       *
[4447] BEE7 00              RTN               *
[4448]               **************************
[4449] BEE8 06,B0,66 ZSDIST CALL DIST         *    DISTANCE
[4450] BEEB D6,42,B3 DISLP  CEQ  >B3,@CHAT    *
[4451] BEEE 4B,1A           BR   LNKRTN       *
[4452] BEF0 06,B0,69        CALL GAFC4        *
[4453] BEF3 5E,EB           BR   DISLP        *
[4454]               *********************************************************  

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0078 
EQUATES EXEC-359
Symbol Table #1 (New,alpha)  
0041 A          834C AAA        8302 AAA1       00CB ABSZ       801E ACCEPT     
A19E ACCEPX     00A4 ACCEPZ     03B7 ACCTRY     8302 ACCUM      03AE ACCVRA     
03AC ACCVRW     00EC ALLZ       00BB ANDZ       00F9 APPENZ     BEE5 AR         
835D ARG1       8367 ARG11      836B ARG15      836C ARG16      835E ARG2       
835F ARG3       8360 ARG4       8361 ARG5       8362 ARG6       8363 ARG7       
8364 ARG8       A88A ASC        A51A ASC01      00DC ASCZ       007C ASSGNV     
B1B8 ASSRTN     00CC ATNZ       A85B ATTNUT     A9EA ATTREG     00F0 ATZ        
602E AUTO1      0394 AUTTMP     0008 BACK       8343 BASE       00F1 BASEZ      
8350 BBB        830C BBB1       00EE BEEPZ      BBE2 BIASAG     BBF1 BIASLP     
BBFE BIASM      BC01 BIASSV     0020 BKGD       ACC9 BORDER     0002 BREAK      
008E BREAKZ     8346 BUFLEV     8366 BYTE1      8367 BYTE2      8368 BYTE3      
830C BYTES      830A CALIST     009D CALLZ      837D CB         834E CCC        
8308 CCC1       834A CCHAR      8308 CCPADD     8308 CCPADR     8306 CCPPTR     
0012 CFI        A2EE CFIFCH     ADFA CHAR1      ADFC CHAR2      AB89 CHAR40     
AB49 CHAR5      ABB8 CHAR50     ABCA CHARL2     ABE5 CHARL3     AC1F CHARL4     
AB46 CHARLY     9CEA CHARS      8342 CHAT       6A78 CHKEND     AC0D CHRFIL     
B0E8 CHRLP      B0CE CHRSET     601C CHRTAB     6018 CHRTBL     000D CHRTN      
A4FF CHRZ01     00D6 CHRZZ      830E CHSAV      0080 CIF        A341 CIFSND     
00C5 CIRCUZ     A3ED CKSTNM     AA18 CLEAR      800A CLOSE      A19B CLOSEX     
00A0 CLOSEZ     A374 CLRFAC     0007 CLRLN      A116 CLRRTN     8012 CLSALL     
B08E CODIST     BED6 COINLP     A921 COL08      A934 COL09      A93C COL10      
A949 COL20      A952 COL21      A980 COL22      003A COLON      00B5 COLONZ     
A91D COLOR      A9F6 COMB       B1AA COMMA      B1AD COMMA2     002C COMMAT     
00B3 COMMAZ     0070 COMPCT     A48E CONC06     A438 CONCAT     00B8 CONCZ      
A250 CONPI      0075 CONT       B31D CONTIN     A8E5 CONV1      00CD COSZ       
AC94 CPAR       BECD CPAR2      03BC CPTEMP     BB6D CPUPGM     0820 CRNBUF     
08BE CRNEND     B817 CRUI       B832 CRUI16     007F CRUNCH     B842 CRUO       
B858 CRUO16     B867 CRUO8      B891 CRUSET     B889 CRUTMP     B8A7 CSLOAD     
0390 CSNTMP     03BA CSNTP1     0010 CSNUM      B874 CSR        0002 CSTRIN     
B87C CSV        B86C CSW        830E CURINC     8314 CURLIN     007E CURSOR     
8334 DATA       834D DATAAD     A86E DATAST     0093 DATAZ      A889 DATST1     
BA98 DCHAGN     BB22 DCOL10     BB48 DCOL20     8354 DDD1       0089 DEFZ       
8002 DELET      A1A4 DELETX     0099 DELETZ     A80A DELINK     0087 DELREP     
8306 DFLTLM     00E9 DIGITZ     008A DIMZ       B2D9 DIRSPH     B202 DIRSPK     
BEEB DISLP      6A7C DISO       8000 DISPL1     A1A1 DISPLX     00A2 DISPLZ     
B066 DIST       00C4 DIVIZ      0003 DLETE      0024 DOLLAR     000A DOWN       
BE2A DSKDSR     BE35 DSRDSS     8317 DSRFLG     BA95 DUPCHR     BB1E DUPCLR     
000A DWNARR     BC61 EAMENU     BC41 EASAVE     007F EDGECH     6032 EDITLN     
8350 EEE        8358 EEE1       0081 ELSEZ      02FE ENDSCR     008B ENDZ       
8332 ENLN       6A80 ENT09      6A7E ENTER      801C EOF        A183 EOFX       
00BE EQUALZ     00EF ERASEZ     837C ERCODE     A8AB ERORZ      AD3F ERR10      
ADEA ERRBA      A143 ERRBRK     ADE2 ERRBS      ADEE ERRBV      ADAF ERRC05     
8322 ERRCOD     ADAA ERRCOM     BE26 ERRFE      ADD2 ERRFNN     ADF2 ERRIAL     
038A ERRLN      ADE6 ERRLNF     ADC6 ERRMEM     ADC2 ERRMUV     ADCE ERRNWF     
A699 ERROLP     00A5 ERRORZ     A0E9 ERRRDY     ADDA ERRRSC     ADDE ERRRWG     
ADF6 ERRSNF     ADBE ERRSNM     ADD6 ERRSNS     ADCA ERRSO      B621 ERRSSL     
ADBA ERRSYN     ACF9 ERRWXY     6A84 ERRZ       6A84 ERRZZ      BB7C EXAGN      
A09C EXEC       A0A9 EXEC1      A0BC EXEC20     A127 EXEC6C     A12B EXEC6D     
A11A EXECBK     0076 EXECG      A0DF EXECND     A0ED EXECTR     BB79 EXECUT     
8376 EXPZ       00CE EXPZZ      832E EXTRAM     0046 F          834B FAC1       
8354 FAC10      8355 FAC11      8356 FAC12      8357 FAC13      8358 FAC14      
8359 FAC15      835A FAC16      835B FAC17      834C FAC2       834D FAC3       
834E FAC4       834F FAC5       8350 FAC6       8351 FAC7       8352 FAC8       
8353 FAC9       0006 FADD       000A FCOMP      0009 FDIV       834E FFF        
8356 FFF1       0001 FILSPC     00FA FIXEDZ     8345 FLAG       A3F3 FLT1       
0012 FLTINT     AA2D FLTS       0008 FMUL       B42A FNDNUM     8317 FNUM       
8317 FORNET     0009 FORW       008C FORZ       B520 FOUND      8340 FREPTR     
A01C GA01C      A01E GA01E      A0AE GA0AE      A0B2 GA0B2      A102 GA102      
A1B7 GA1B7      A1C4 GA1C4      A20E GA20E      A216 GA216      A225 GA225      
A22D GA22D      A263 GA263      A3B6 GA3B6      A420 GA420      A42B GA42B      
A45B GA45B      A53E GA53E      A57C GA57C      A5A4 GA5A4      A5AE GA5AE      
A649 GA649      A659 GA659      A679 GA679      A6D1 GA6D1      A6DA GA6DA      
A6FF GA6FF      A720 GA720      A73B GA73B      A79C GA79C      A79F GA79F      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0079 
EQUATES EXEC-359
A7E2 GA7E2      A7F6 GA7F6      A7FC GA7FC      A833 GA833      A846 GA846      
A84A GA84A      A84C GA84C      A856 GA856      A887 GA887      A897 GA897      
A8A5 GA8A5      A8F9 GA8F9      A919 GA919      A9B5 GA995      A9BD GA99D      
AA59 GAA39      AA6D GAA4D      AB5E GAB1F      AB67 GAB28      ABAA GAB6B      
ABC1 GAB82      ABC3 GAB84      ABF0 GABB1      AC02 GABC3      AC29 GABD1      
AC5C GAC04      AC5F GAC07      AC98 GAC35      ACF8 GAC95      ACFC GAC99      
AD12 GACAF      AD1D GACBA      AD28 GACC5      AD31 GACCE      AD33 GACD0      
AD66 GAD03      AD6E GAD0B      ADA1 GAD3E      ADA5 GAD42      AF60 GAEBB      
AF86 GAEE1      AF9B GAEF6      AFA2 GAEFD      AFC1 GAF1C      AFC3 GAF1E      
AFE2 GAF3D      AFFB GAF56      B011 GAF6C      B069 GAFC4      B08A GAFE5      
B0B6 GB011      B0BC GB017      B185 GB0BD      B1A3 GB0DB      B1A9 GB0E1      
B1BA GB0F2      B220 GB158      B238 GB170      B23B GB173      B246 GB17E      
B250 GB188      B25E GB196      B268 GB1A0      B26F GB1A7      B296 GB1CE      
B2C4 GB1FC      B2C6 GB1FE      B309 GB241      B320 GB258      B364 GB29C      
B372 GB2AA      B3B3 GB2EB      B3DE GB316      B3E0 GB318      B404 GB33C      
B40E GB346      B417 GB34F      B41A GB352      B438 GB370      B444 GB37C      
B453 GB38B      B463 GB39B      B474 GB3AC      B481 GB3B9      B48C GB3C4      
B48D GB3C5      B49C GB3D4      B4A5 GB3DD      B4BC GB3F4      B4CC GB404      
B4D5 GB40D      B4F8 GB430      B516 GB44E      B555 GB48D      B560 GB498      
B569 GB4A1      B588 GB4C0      B58E GB4C6      B599 GB4D1      B5B0 GB4E8      
A8FA GCHAR      A8FD GCHAR2     BE4D GCHARA     008E GDTECT     E025 GE025      
A346 GETLP      A2F6 GETNUM     B3E7 GETPRM     0071 GETSTR     B464 GETTIM     
BDB3 GKEY1      BDBA GKEY2      BDCE GKEY3      B984 GMAGN      B98F GMO1       
B99E GMO2       B9AA GMO3       B981 GMOT       0087 GOSUBZ     BD78 GOTON0     
0086 GOTOZ      0085 GOZ        ACA9 GPHV       ACAC GPHVRC     A22F GPLCAL     
8389 GRAMFL     0085 GREAD      008C GREAD1     003E GREAT      00C0 GREATZ     
0022 GRINT      6034 GRSUB1     802C GRSUB2     802E GRSUB3     008B GVWITE     
0086 GWRITE     6036 GWSUB      B947 HAGAIN     AB03 HCHAR      AB0A HCHAR1     
AB12 HCHAR2     B954 HDONE      B712 HEX        B715 HEXAGN     B7B5 HEXDON     
B760 HEXNS      B768 HEXNS2     B7A7 HEXS0      B7A1 HEXS1      B798 HEXS2      
B792 HEXS3      B789 HEXS4      B7BC HEXSN      B7CD HEXSN2     B7DC HEXSN3     
B7E9 HEXSN4     B772 HEXSTR     A362 HFMT       B944 HGET       8370 HIVDP      
B8D6 HPAGIN     B8F4 HPOUT      B8D3 HPUT       B8EA HPUTLP     B8E4 HPUTS      
ACD6 HVCHR      B92C HVGETS     B8B1 HVPNUM     B8BF HVPUTN     002D HYPEN      
0084 IFZ        00A3 IMAGEZ     BA37 INOALL     8006 INPUT      03AA INPUTP     
A195 INPUTX     0092 INPUTZ     0004 INSRT      A995 INTARG     00F5 INTERZ     
8338 INTRIN     A28D INTRND     00CF INTZ       BA1B INV        BA1E INVAGN     
BA45 INVLP      BA51 INVNOK     0084 IO         B7EF IOAGN      B882 IODONE     
833C IOSTRT     B9FB J1         B9FD J2         BA09 J3         BE18 JOYAGN     
BDE2 JOYRPT     BDDF JOYST      8377 JOYX       A9AA JOYXY      8376 JOYY       
AC26 KEY        AC3D KEY1B      AC61 KEY1C      AC65 KEY2       AC67 KEY2A      
8374 KEYBD      BD07 KEYJOY     BD27 KEYSTR     6022 KILSYM     A4F3 LEN01      
A4FB LEN02      8360 LENCST     8362 LENWST     00D5 LENZ       003C LESS       
00BF LESSZ      008D LETZ       A8D3 LINE       A6A4 LINEGP     A026 LINK1      
A030 LINK2      A03A LINK3      A044 LINK4      A04E LINK5      A058 LINK6      
A062 LINK7      A06B LINKA      A073 LINKB      A07D LINKC      A088 LINKD      
A094 LINKE      AE00 LINKS1     AE0B LINKS2     AE19 LINKS3     AE26 LINKS4     
AE30 LINKS5     AE3C LINKS6     AE47 LINKS7     AE52 LINKS8     AE5E LINKS9     
AE6B LINKSA     AE73 LINKSB     AE7D LINKSC     AE89 LINKSD     AE93 LINKSE     
AE9D LINKSF     AEA6 LINKSG     AEAF LINKSH     AEB8 LINKSI     AEC1 LINKSJ     
AECD LINKSK     AED9 LINKSL     AEE5 LINKSM     AEED LINKSN     AEF4 LINKSO     
AF00 LINKSP     AF0D LINKSQ     AF19 LINKSR     AF27 LINKSS     BB9D LINKST     
BBA9 LINKSU     BBB9 LINKSV     BBC5 LINKSW     BBD6 LINKSX     BC12 LINKSY     
BC1F LINKSZ     BC2D LINKT1     BC3A LINKT2     BC67 LINKT3     BC78 LINKT4     
BC80 LINKT5     BCC6 LINKT6     8030 LINPUT     A1A7 LINPUX     00AA LINPUZ     
8312 LINUM      0002 LISTZ      A3FB LITS05     A42C LITS06     A404 LITS07     
A406 LITS08     A411 LITS09     8336 LNBUF      A6AE LNGP1      A6C2 LNGP2      
A6E6 LNGP2B     A6FA LNGP4      AB1E LNKRT2     AB1A LNKRTN     00C9 LNZ        
B5B5 LOADAD     0371 LODFLG     00D0 LOGZ       B4F9 LOOKUP     B2B3 LOOP1      
B2F5 LOOPR      B964 LP1        B94A LP2        AC89 LPAR       00B7 LPARZ      
8348 LSUBP      A26D MAXMIN     00DF MAXZ       0072 MEMCHK     0008 MERGEZ     
002D MINUS      00C2 MINUSZ     00E0 MINZ       8302 MNUM       837A MOTION     
B625 MOVES      B628 MOVESA     B653 MOVESB     B66E MOVESC     B70B MOVESD     
B66B MOVESN     B64D MOVESX     039E MRGPAB     6048 MSGBRK     6053 MSGTA      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0080 
EQUATES EXEC-359
B681 MTYPE      B68B MTYPE0     B693 MTYPE1     B6A1 MTYPE2     B6AE MTYPE3     
B6B8 MTYPE4     B6C1 MTYPE5     B6D0 MTYPE6     B6DE MTYPE7     B6E8 MTYPE8     
B6F0 MTYPE9     B6FE MTYPEA     B679 MTYPES     00C3 MULTZ      0088 MVDN       
0089 MVUP       A68B NBREAK     03BE NEWTOP     B53B NEXT       B279 NEXT1      
B28E NEXT2      0096 NEXTZ      A31F NGOOD      A321 NGOOD1     0039 NINE       
02E2 NLNADD     A258 NMAX       A25E NMAXZ1     A265 NMIN       8314 NMLEN      
830C NMPTR      B9D2 NOALL      B4DE NOTIME     0374 NOTONE     00BD NOTZ       
A248 NPI        BEE2 NR         800E NREAD      A18C NREADX     A2AF NRND       
A2B5 NRND1      A2C3 NRND2      A2C5 NRND3      A2D2 NRND4      A2D4 NRND5      
A37F NRNDMZ     A681 NTRACE     8328 NUDTAB     A147 NUDTB      B1B5 NULRTN     
0023 NUMBER     00FD NUMBEZ     0000 NUMBR      00C8 NUMCOZ     B4E2 NUMERC     
00E8 NUMERZ     A2E5 NUMFCH     A9DD NUMVAR     00C8 NUMZ       A69D NUNBRK     
A686 NUNTRC     B9CA NXALL      B334 NXTPAR     B5A5 NXTPHR     0060 OFFSET     
03BC OLDTOP     0005 OLDZ       A218 ONBRK      0378 ONECHR     A1DA ONERR      
A1F2 ONERR2     A206 ONERR4     BDA3 ONKEY1     BD86 ONLP       A1AA ONWARN     
A1CF ONWRN5     A1D1 ONWRN7     009B ONZ        8008 OPEN       A198 OPENX      
009F OPENZ      8317 OPTFLG     009E OPTIOZ     00BA ORZ        00F7 OUTPUZ     
B086 OVER       8304 PABPTR     0001 PARCOM     A565 PARFF      0074 PARSE      
002E PERIOD     00FB PERMAZ     0079 PGMCHR     832C PGMPTR     8352 PHADDR     
835D PHDATA     8300 PHLEN      8301 PHRADD     B3FD PHRASE     00DD PIZ        
002B PLUS       00C1 PLUSZ      A5BD POS01      A5F8 POS02      A606 POS04      
A615 POS06      A617 POS08      A61C POS10      A624 POS12      00D9 POSZ       
B1BD PREPN      8344 PRGFLG     8004 PRINT      A18F PRINTX     009C PRINTZ     
83CE PRTNFN     835E PTCBED     830E PTCCIP     8308 PTCCIS     8314 PTCCPH     
8304 PTEBSL     8312 PTFBPH     8300 PTFBSL     830C PTFCIP     8306 PTFCIS     
B4B8 PTIME      8302 PTLBSL     834F PTLCIL     8310 PTLCIP     830A PTLCIS     
8316 PTLCPH     A430 PUSSTR     A357 PUTLP      0022 QUOTE      8389 RAMFLG     
8386 RAMFRE     830A RAMPTR     8384 RAMTOP     ACA0 RAN16      8378 RANDOM     
0095 RANDOZ     0002 RANGE      B186 RANGEV     8358 READ       B5E7 READAD     
6A86 READL1     0097 READZ      8022 REC        0006 RECALL     8307 RECLEN     
A189 RECX       00DE RECZ       00F4 RELATZ     009A REMZ       0006 RESEQZ     
800C RESTOR     A192 RESTOX     0094 RESTOZ     0088 RETURZ     8375 RKEY       
B9BB RMAGN      B9E1 RMALL      B9B8 RMOT       B9E9 RMOTLP     B3C7 RNDAG      
A2A7 RNDEM      A29F RNDEP      A3C0 RNDM1      A3D2 RNDMZ      03A5 RNDX1      
03A0 RNDX2      00D7 RNDZ       A2FF ROWCOL     00B6 RPARZ      A628 RPTZ01     
A667 RPTZ02     00E1 RPTZZ      BD35 RSCAN      BD3E RSCAN0     BD41 RSCAN1     
BD45 RSCAN2     BD5B RSCAN3     BD5C RSCAN4     BD61 RSCAN5     8388 RSTK       
0082 RTNB       8326 RTNG       A5B9 RTNSET     00A9 RUNZ       BCDB RXBFIL     
B7EC RXBIO      BBCD RXBNEW     BCC3 RXBRUN     BCBB RXBXBP     BAB6 S00T10     
BA14 S1ET9F     000B SADD       0388 SAVEVP     0007 SAVEZ      B1D0 SAY        
0384 SBUFLV     007D SCHSYM     008F SCNSMT     BAC1 SCOL10     BAF1 SCOL20     
02E0 SCRNBS     0083 SCROLL     B521 SEARCH     0003 SEETWO     A490 SEGZ01     
A4D4 SEGZ06     A4EF SEGZ08     00D8 SEGZZ      003B SEMICO     00B4 SEMICZ     
00F6 SEQUEZ     B3F9 SETCB      B61A SETRW      0386 SEXTRM     0398 SFLAG      
00D1 SGNZZ      00D2 SINZ       03B4 SIZCCP     00EB SIZEZ      03B6 SIZREC     
03B8 SIZXPT     0396 SLSUBP     007B SMB        831E SMTSRT     AADF SND05      
A343 SNDASS     A33A SNDER      AA35 SNDREG     B80D SOG        AA77 SOUND1     
AABF SOUND2     AAA6 SOUND3     AADD SOUND5     AAEE SOUND6     B812 SOV        
8300 SP00       8302 SP02       8304 SP04       8306 SP06       0020 SPACE      
BEA6 SPAR       BEB0 SPAR1      BEC8 SPAR2      B152 SPCHR      A989 SPCOL      
AF68 SPDEL1     AF94 SPDEL2     B293 SPEAK      007E SPEED      B329 SPGET      
0382 SPGMPT     BE54 SPGS       BE81 SPGS1      BE8C SPGS2      BE98 SPGS3      
BEA1 SPGS4      BE6E SPGSA      8369 SPKSTS     834B SPLFLG     B135 SPLOC      
B164 SPMOVE     B173 SPMOVF     03AA SPNUM      B10B SPNUM1     B111 SPNUM2     
B118 SPNUM3     B11D SPNUM4     B123 SPNUM5     B113 SPNUM6     AFE5 SPRCOI     
AF65 SPRDEL     6016 SPRINT     B045 SPRLC2     B042 SPRLOC     B01A SPRMAG     
B032 SPRMOV     B035 SPRMV2     B038 SPRMV3     B03B SPRMV4     AFA7 SPRP02     
AFD8 SPRP03     B056 SPRPAT     AFA4 SPRPOS     B059 SPRPT2     0300 SPRSAL     
AF3A SPRT3      AF4F SPRT4      AF34 SPRTE      07FF SPRVB      8308 SPSAL      
830A SPTMP      00D3 SQRZ       AA13 SQU05      A9FC SQUISH     8020 SRDATA     
831C SREF       BA58 SSDSLL     0082 SSEPZ      039A SSTEMP     039C SSTMP2     
000C SSUB       830A STADDR     0372 START      B5FF STDATA     00B2 STEPZ      
83BD STKMAX     83AF STKMIN     8330 STLN       0098 STOPZ      8302 STPT       
831A STREND     A2D6 STRFCH     A2DC STRGET     00C7 STRINZ     8364 STRLEN     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0081 
EQUATES EXEC-359
8312 STRPTR     8318 STRSP      0065 STRVAL     A52B STRZ01     00DB STRZZ      
8324 STVSPT     A36D SUBLP3     00A8 SUBNDZ     BE25 SUBRTN     833A SUBTAB     
00A7 SUBXTZ     00A1 SUBZ       BA66 SWCHAG     BA63 SWCHR      BABD SWCLR      
007A SYM        0376 SYMBOL     833E SYMTAB     0000 SYNCHK     63A5 SZNEW      
601E SZRUN      A186 SZRUNX     65C9 SZSIZE     0392 TABSAV     00FC TABZ       
00D4 TANZ       8354 TEMP1      8356 TEMP2      8364 TEMP4      8366 TEMP5      
8368 TEMP6      00B0 THENZ      8379 TIMER      B454 TIMING     8351 TIMLEN     
6030 TOPL02     601A TOPL10     63DD TOPL15     6372 TOPLEV     8310 TOPSTK     
834C TOTTIM     00B1 TOZ        0090 TRACEZ     0083 TREMZ      B4FB TRYAGN     
00EA UALPHZ     A6FC UBSUB      A70C UBSUB1     A717 UDF        A6F7 UNBK01     
008F UNBREZ     00C8 UNQSTZ     0091 UNTRAZ     000B UPARR      00F8 UPDATZ     
000B UPMV       00ED USINGZ     B961 VAGAIN     00DA VAL        A555 VAL01      
A571 VALCD      03B2 VALIDL     03B0 VALIDP     00FE VALIDZ     8300 VAR0       
830B VAR2       830E VAR4       8310 VAR5       8311 VAR6       8312 VAR7       
8314 VAR9       832A VARA       8308 VARC       00F3 VARIAZ     8301 VARV       
8320 VARW       8304 VARY       8306 VARY2      AB26 VCHAR      AB2D VCHAR1     
AB3F VCHAR2     B977 VDONE      837B VDPSTS     837B VDPSTT     AA1F VERS       
A367 VFMT       B95E VGET       008A VGWITE     B8FE VPAGIN     0078 VPOP       
B925 VPOUT      0077 VPUSH      B8FB VPUT       B912 VPUTLP     B90C VPUTS      
0958 VRAMVS     0379 VRMSND     03C0 VROAZ      001C VWIDTH     B60F WAIT       
A0D4 WARNGZ     00A6 WARNZ      6A82 WARNZZ     835A WRITE      A6F1 WRNLNF     
A0D9 WRNN01     A8F1 WRNNO      A457 WRNST1     A641 WRNST2     A29A X1SEED     
0003 X2         A295 X2SEED     BC6E XBMENU     BC8A XBPGM      0073 XCNS       
BC36 XEAED      8316 XFLAG      A684 XMLCON     00BC XORZ       AB17 XPTRTN     
AA3E XSOUND     0030 ZERO       BE15 ZJOYST     BCFD ZKEY       BD68 ZONKEY     
BED3 ZSCOI      BEE8 ZSDIST     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0082 
EQUATES EXEC-359
Symbol Table #2 (New,value)  
0000 NUMBR      0000 SYNCHK     0001 FILSPC     0001 PARCOM     0002 BREAK      
0002 CSTRIN     0002 LISTZ      0002 RANGE      0003 DLETE      0003 SEETWO     
0003 X2         0004 INSRT      0005 OLDZ       0006 FADD       0006 RECALL     
0006 RESEQZ     0007 CLRLN      0007 SAVEZ      0008 BACK       0008 FMUL       
0008 MERGEZ     0009 FDIV       0009 FORW       000A DOWN       000A DWNARR     
000A FCOMP      000B SADD       000B UPARR      000B UPMV       000C SSUB       
000D CHRTN      0010 CSNUM      0012 CFI        0012 FLTINT     001C VWIDTH     
0020 BKGD       0020 SPACE      0022 GRINT      0022 QUOTE      0023 NUMBER     
0024 DOLLAR     002B PLUS       002C COMMAT     002D HYPEN      002D MINUS      
002E PERIOD     0030 ZERO       0039 NINE       003A COLON      003B SEMICO     
003C LESS       003E GREAT      0041 A          0046 F          0060 OFFSET     
0065 STRVAL     0070 COMPCT     0071 GETSTR     0072 MEMCHK     0073 XCNS       
0074 PARSE      0075 CONT       0076 EXECG      0077 VPUSH      0078 VPOP       
0079 PGMCHR     007A SYM        007B SMB        007C ASSGNV     007D SCHSYM     
007E CURSOR     007E SPEED      007F CRUNCH     007F EDGECH     0080 CIF        
0081 ELSEZ      0082 RTNB       0082 SSEPZ      0083 SCROLL     0083 TREMZ      
0084 IFZ        0084 IO         0085 GOZ        0085 GREAD      0086 GOTOZ      
0086 GWRITE     0087 DELREP     0087 GOSUBZ     0088 MVDN       0088 RETURZ     
0089 DEFZ       0089 MVUP       008A DIMZ       008A VGWITE     008B ENDZ       
008B GVWITE     008C FORZ       008C GREAD1     008D LETZ       008E BREAKZ     
008E GDTECT     008F SCNSMT     008F UNBREZ     0090 TRACEZ     0091 UNTRAZ     
0092 INPUTZ     0093 DATAZ      0094 RESTOZ     0095 RANDOZ     0096 NEXTZ      
0097 READZ      0098 STOPZ      0099 DELETZ     009A REMZ       009B ONZ        
009C PRINTZ     009D CALLZ      009E OPTIOZ     009F OPENZ      00A0 CLOSEZ     
00A1 SUBZ       00A2 DISPLZ     00A3 IMAGEZ     00A4 ACCEPZ     00A5 ERRORZ     
00A6 WARNZ      00A7 SUBXTZ     00A8 SUBNDZ     00A9 RUNZ       00AA LINPUZ     
00B0 THENZ      00B1 TOZ        00B2 STEPZ      00B3 COMMAZ     00B4 SEMICZ     
00B5 COLONZ     00B6 RPARZ      00B7 LPARZ      00B8 CONCZ      00BA ORZ        
00BB ANDZ       00BC XORZ       00BD NOTZ       00BE EQUALZ     00BF LESSZ      
00C0 GREATZ     00C1 PLUSZ      00C2 MINUSZ     00C3 MULTZ      00C4 DIVIZ      
00C5 CIRCUZ     00C7 STRINZ     00C8 NUMCOZ     00C8 NUMZ       00C8 UNQSTZ     
00C9 LNZ        00CB ABSZ       00CC ATNZ       00CD COSZ       00CE EXPZZ      
00CF INTZ       00D0 LOGZ       00D1 SGNZZ      00D2 SINZ       00D3 SQRZ       
00D4 TANZ       00D5 LENZ       00D6 CHRZZ      00D7 RNDZ       00D8 SEGZZ      
00D9 POSZ       00DA VAL        00DB STRZZ      00DC ASCZ       00DD PIZ        
00DE RECZ       00DF MAXZ       00E0 MINZ       00E1 RPTZZ      00E8 NUMERZ     
00E9 DIGITZ     00EA UALPHZ     00EB SIZEZ      00EC ALLZ       00ED USINGZ     
00EE BEEPZ      00EF ERASEZ     00F0 ATZ        00F1 BASEZ      00F3 VARIAZ     
00F4 RELATZ     00F5 INTERZ     00F6 SEQUEZ     00F7 OUTPUZ     00F8 UPDATZ     
00F9 APPENZ     00FA FIXEDZ     00FB PERMAZ     00FC TABZ       00FD NUMBEZ     
00FE VALIDZ     02E0 SCRNBS     02E2 NLNADD     02FE ENDSCR     0300 SPRSAL     
0371 LODFLG     0372 START      0374 NOTONE     0376 SYMBOL     0378 ONECHR     
0379 VRMSND     0382 SPGMPT     0384 SBUFLV     0386 SEXTRM     0388 SAVEVP     
038A ERRLN      0390 CSNTMP     0392 TABSAV     0394 AUTTMP     0396 SLSUBP     
0398 SFLAG      039A SSTEMP     039C SSTMP2     039E MRGPAB     03A0 RNDX2      
03A5 RNDX1      03AA INPUTP     03AA SPNUM      03AC ACCVRW     03AE ACCVRA     
03B0 VALIDP     03B2 VALIDL     03B4 SIZCCP     03B6 SIZREC     03B7 ACCTRY     
03B8 SIZXPT     03BA CSNTP1     03BC CPTEMP     03BC OLDTOP     03BE NEWTOP     
03C0 VROAZ      07FF SPRVB      0820 CRNBUF     08BE CRNEND     0958 VRAMVS     
6016 SPRINT     6018 CHRTBL     601A TOPL10     601C CHRTAB     601E SZRUN      
6022 KILSYM     602E AUTO1      6030 TOPL02     6032 EDITLN     6034 GRSUB1     
6036 GWSUB      6048 MSGBRK     6053 MSGTA      6372 TOPLEV     63A5 SZNEW      
63DD TOPL15     65C9 SZSIZE     6A78 CHKEND     6A7C DISO       6A7E ENTER      
6A80 ENT09      6A82 WARNZZ     6A84 ERRZ       6A84 ERRZZ      6A86 READL1     
8000 DISPL1     8002 DELET      8004 PRINT      8006 INPUT      8008 OPEN       
800A CLOSE      800C RESTOR     800E NREAD      8012 CLSALL     801C EOF        
801E ACCEPT     8020 SRDATA     8022 REC        802C GRSUB2     802E GRSUB3     
8030 LINPUT     8300 PHLEN      8300 PTFBSL     8300 SP00       8300 VAR0       
8301 PHRADD     8301 VARV       8302 AAA1       8302 ACCUM      8302 MNUM       
8302 PTLBSL     8302 SP02       8302 STPT       8304 PABPTR     8304 PTEBSL     
8304 SP04       8304 VARY       8306 CCPPTR     8306 DFLTLM     8306 PTFCIS     
8306 SP06       8306 VARY2      8307 RECLEN     8308 CCC1       8308 CCPADD     
8308 CCPADR     8308 PTCCIS     8308 SPSAL      8308 VARC       830A CALIST     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0083 
EQUATES EXEC-359
830A PTLCIS     830A RAMPTR     830A SPTMP      830A STADDR     830B VAR2       
830C BBB1       830C BYTES      830C NMPTR      830C PTFCIP     830E CHSAV      
830E CURINC     830E PTCCIP     830E VAR4       8310 PTLCIP     8310 TOPSTK     
8310 VAR5       8311 VAR6       8312 LINUM      8312 PTFBPH     8312 STRPTR     
8312 VAR7       8314 CURLIN     8314 NMLEN      8314 PTCCPH     8314 VAR9       
8316 PTLCPH     8316 XFLAG      8317 DSRFLG     8317 FNUM       8317 FORNET     
8317 OPTFLG     8318 STRSP      831A STREND     831C SREF       831E SMTSRT     
8320 VARW       8322 ERRCOD     8324 STVSPT     8326 RTNG       8328 NUDTAB     
832A VARA       832C PGMPTR     832E EXTRAM     8330 STLN       8332 ENLN       
8334 DATA       8336 LNBUF      8338 INTRIN     833A SUBTAB     833C IOSTRT     
833E SYMTAB     8340 FREPTR     8342 CHAT       8343 BASE       8344 PRGFLG     
8345 FLAG       8346 BUFLEV     8348 LSUBP      834A CCHAR      834B FAC1       
834B SPLFLG     834C AAA        834C FAC2       834C TOTTIM     834D DATAAD     
834D FAC3       834E CCC        834E FAC4       834E FFF        834F FAC5       
834F PTLCIL     8350 BBB        8350 EEE        8350 FAC6       8351 FAC7       
8351 TIMLEN     8352 FAC8       8352 PHADDR     8353 FAC9       8354 DDD1       
8354 FAC10      8354 TEMP1      8355 FAC11      8356 FAC12      8356 FFF1       
8356 TEMP2      8357 FAC13      8358 EEE1       8358 FAC14      8358 READ       
8359 FAC15      835A FAC16      835A WRITE      835B FAC17      835D ARG1       
835D PHDATA     835E ARG2       835E PTCBED     835F ARG3       8360 ARG4       
8360 LENCST     8361 ARG5       8362 ARG6       8362 LENWST     8363 ARG7       
8364 ARG8       8364 STRLEN     8364 TEMP4      8366 BYTE1      8366 TEMP5      
8367 ARG11      8367 BYTE2      8368 BYTE3      8368 TEMP6      8369 SPKSTS     
836B ARG15      836C ARG16      8370 HIVDP      8374 KEYBD      8375 RKEY       
8376 EXPZ       8376 JOYY       8377 JOYX       8378 RANDOM     8379 TIMER      
837A MOTION     837B VDPSTS     837B VDPSTT     837C ERCODE     837D CB         
8384 RAMTOP     8386 RAMFRE     8388 RSTK       8389 GRAMFL     8389 RAMFLG     
83AF STKMIN     83BD STKMAX     83CE PRTNFN     9CEA CHARS      A01C GA01C      
A01E GA01E      A026 LINK1      A030 LINK2      A03A LINK3      A044 LINK4      
A04E LINK5      A058 LINK6      A062 LINK7      A06B LINKA      A073 LINKB      
A07D LINKC      A088 LINKD      A094 LINKE      A09C EXEC       A0A9 EXEC1      
A0AE GA0AE      A0B2 GA0B2      A0BC EXEC20     A0D4 WARNGZ     A0D9 WRNN01     
A0DF EXECND     A0E9 ERRRDY     A0ED EXECTR     A102 GA102      A116 CLRRTN     
A11A EXECBK     A127 EXEC6C     A12B EXEC6D     A143 ERRBRK     A147 NUDTB      
A183 EOFX       A186 SZRUNX     A189 RECX       A18C NREADX     A18F PRINTX     
A192 RESTOX     A195 INPUTX     A198 OPENX      A19B CLOSEX     A19E ACCEPX     
A1A1 DISPLX     A1A4 DELETX     A1A7 LINPUX     A1AA ONWARN     A1B7 GA1B7      
A1C4 GA1C4      A1CF ONWRN5     A1D1 ONWRN7     A1DA ONERR      A1F2 ONERR2     
A206 ONERR4     A20E GA20E      A216 GA216      A218 ONBRK      A225 GA225      
A22D GA22D      A22F GPLCAL     A248 NPI        A250 CONPI      A258 NMAX       
A25E NMAXZ1     A263 GA263      A265 NMIN       A26D MAXMIN     A28D INTRND     
A295 X2SEED     A29A X1SEED     A29F RNDEP      A2A7 RNDEM      A2AF NRND       
A2B5 NRND1      A2C3 NRND2      A2C5 NRND3      A2D2 NRND4      A2D4 NRND5      
A2D6 STRFCH     A2DC STRGET     A2E5 NUMFCH     A2EE CFIFCH     A2F6 GETNUM     
A2FF ROWCOL     A31F NGOOD      A321 NGOOD1     A33A SNDER      A341 CIFSND     
A343 SNDASS     A346 GETLP      A357 PUTLP      A362 HFMT       A367 VFMT       
A36D SUBLP3     A374 CLRFAC     A37F NRNDMZ     A3B6 GA3B6      A3C0 RNDM1      
A3D2 RNDMZ      A3ED CKSTNM     A3F3 FLT1       A3FB LITS05     A404 LITS07     
A406 LITS08     A411 LITS09     A420 GA420      A42B GA42B      A42C LITS06     
A430 PUSSTR     A438 CONCAT     A457 WRNST1     A45B GA45B      A48E CONC06     
A490 SEGZ01     A4D4 SEGZ06     A4EF SEGZ08     A4F3 LEN01      A4FB LEN02      
A4FF CHRZ01     A51A ASC01      A52B STRZ01     A53E GA53E      A555 VAL01      
A565 PARFF      A571 VALCD      A57C GA57C      A5A4 GA5A4      A5AE GA5AE      
A5B9 RTNSET     A5BD POS01      A5F8 POS02      A606 POS04      A615 POS06      
A617 POS08      A61C POS10      A624 POS12      A628 RPTZ01     A641 WRNST2     
A649 GA649      A659 GA659      A667 RPTZ02     A679 GA679      A681 NTRACE     
A684 XMLCON     A686 NUNTRC     A68B NBREAK     A699 ERROLP     A69D NUNBRK     
A6A4 LINEGP     A6AE LNGP1      A6C2 LNGP2      A6D1 GA6D1      A6DA GA6DA      
A6E6 LNGP2B     A6F1 WRNLNF     A6F7 UNBK01     A6FA LNGP4      A6FC UBSUB      
A6FF GA6FF      A70C UBSUB1     A717 UDF        A720 GA720      A73B GA73B      
A79C GA79C      A79F GA79F      A7E2 GA7E2      A7F6 GA7F6      A7FC GA7FC      
A80A DELINK     A833 GA833      A846 GA846      A84A GA84A      A84C GA84C      
A856 GA856      A85B ATTNUT     A86E DATAST     A887 GA887      A889 DATST1     
A88A ASC        A897 GA897      A8A5 GA8A5      A8AB ERORZ      A8D3 LINE       

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0084 
EQUATES EXEC-359
A8E5 CONV1      A8F1 WRNNO      A8F9 GA8F9      A8FA GCHAR      A8FD GCHAR2     
A919 GA919      A91D COLOR      A921 COL08      A934 COL09      A93C COL10      
A949 COL20      A952 COL21      A980 COL22      A989 SPCOL      A995 INTARG     
A9AA JOYXY      A9B5 GA995      A9BD GA99D      A9DD NUMVAR     A9EA ATTREG     
A9F6 COMB       A9FC SQUISH     AA13 SQU05      AA18 CLEAR      AA1F VERS       
AA2D FLTS       AA35 SNDREG     AA3E XSOUND     AA59 GAA39      AA6D GAA4D      
AA77 SOUND1     AAA6 SOUND3     AABF SOUND2     AADD SOUND5     AADF SND05      
AAEE SOUND6     AB03 HCHAR      AB0A HCHAR1     AB12 HCHAR2     AB17 XPTRTN     
AB1A LNKRTN     AB1E LNKRT2     AB26 VCHAR      AB2D VCHAR1     AB3F VCHAR2     
AB46 CHARLY     AB49 CHAR5      AB5E GAB1F      AB67 GAB28      AB89 CHAR40     
ABAA GAB6B      ABB8 CHAR50     ABC1 GAB82      ABC3 GAB84      ABCA CHARL2     
ABE5 CHARL3     ABF0 GABB1      AC02 GABC3      AC0D CHRFIL     AC1F CHARL4     
AC26 KEY        AC29 GABD1      AC3D KEY1B      AC5C GAC04      AC5F GAC07      
AC61 KEY1C      AC65 KEY2       AC67 KEY2A      AC89 LPAR       AC94 CPAR       
AC98 GAC35      ACA0 RAN16      ACA9 GPHV       ACAC GPHVRC     ACC9 BORDER     
ACD6 HVCHR      ACF8 GAC95      ACF9 ERRWXY     ACFC GAC99      AD12 GACAF      
AD1D GACBA      AD28 GACC5      AD31 GACCE      AD33 GACD0      AD3F ERR10      
AD66 GAD03      AD6E GAD0B      ADA1 GAD3E      ADA5 GAD42      ADAA ERRCOM     
ADAF ERRC05     ADBA ERRSYN     ADBE ERRSNM     ADC2 ERRMUV     ADC6 ERRMEM     
ADCA ERRSO      ADCE ERRNWF     ADD2 ERRFNN     ADD6 ERRSNS     ADDA ERRRSC     
ADDE ERRRWG     ADE2 ERRBS      ADE6 ERRLNF     ADEA ERRBA      ADEE ERRBV      
ADF2 ERRIAL     ADF6 ERRSNF     ADFA CHAR1      ADFC CHAR2      AE00 LINKS1     
AE0B LINKS2     AE19 LINKS3     AE26 LINKS4     AE30 LINKS5     AE3C LINKS6     
AE47 LINKS7     AE52 LINKS8     AE5E LINKS9     AE6B LINKSA     AE73 LINKSB     
AE7D LINKSC     AE89 LINKSD     AE93 LINKSE     AE9D LINKSF     AEA6 LINKSG     
AEAF LINKSH     AEB8 LINKSI     AEC1 LINKSJ     AECD LINKSK     AED9 LINKSL     
AEE5 LINKSM     AEED LINKSN     AEF4 LINKSO     AF00 LINKSP     AF0D LINKSQ     
AF19 LINKSR     AF27 LINKSS     AF34 SPRTE      AF3A SPRT3      AF4F SPRT4      
AF60 GAEBB      AF65 SPRDEL     AF68 SPDEL1     AF86 GAEE1      AF94 SPDEL2     
AF9B GAEF6      AFA2 GAEFD      AFA4 SPRPOS     AFA7 SPRP02     AFC1 GAF1C      
AFC3 GAF1E      AFD8 SPRP03     AFE2 GAF3D      AFE5 SPRCOI     AFFB GAF56      
B011 GAF6C      B01A SPRMAG     B032 SPRMOV     B035 SPRMV2     B038 SPRMV3     
B03B SPRMV4     B042 SPRLOC     B045 SPRLC2     B056 SPRPAT     B059 SPRPT2     
B066 DIST       B069 GAFC4      B086 OVER       B08A GAFE5      B08E CODIST     
B0B6 GB011      B0BC GB017      B0CE CHRSET     B0E8 CHRLP      B10B SPNUM1     
B111 SPNUM2     B113 SPNUM6     B118 SPNUM3     B11D SPNUM4     B123 SPNUM5     
B135 SPLOC      B152 SPCHR      B164 SPMOVE     B173 SPMOVF     B185 GB0BD      
B186 RANGEV     B1A3 GB0DB      B1A9 GB0E1      B1AA COMMA      B1AD COMMA2     
B1B5 NULRTN     B1B8 ASSRTN     B1BA GB0F2      B1BD PREPN      B1D0 SAY        
B202 DIRSPK     B220 GB158      B238 GB170      B23B GB173      B246 GB17E      
B250 GB188      B25E GB196      B268 GB1A0      B26F GB1A7      B279 NEXT1      
B28E NEXT2      B293 SPEAK      B296 GB1CE      B2B3 LOOP1      B2C4 GB1FC      
B2C6 GB1FE      B2D9 DIRSPH     B2F5 LOOPR      B309 GB241      B31D CONTIN     
B320 GB258      B329 SPGET      B334 NXTPAR     B364 GB29C      B372 GB2AA      
B3B3 GB2EB      B3C7 RNDAG      B3DE GB316      B3E0 GB318      B3E7 GETPRM     
B3F9 SETCB      B3FD PHRASE     B404 GB33C      B40E GB346      B417 GB34F      
B41A GB352      B42A FNDNUM     B438 GB370      B444 GB37C      B453 GB38B      
B454 TIMING     B463 GB39B      B464 GETTIM     B474 GB3AC      B481 GB3B9      
B48C GB3C4      B48D GB3C5      B49C GB3D4      B4A5 GB3DD      B4B8 PTIME      
B4BC GB3F4      B4CC GB404      B4D5 GB40D      B4DE NOTIME     B4E2 NUMERC     
B4F8 GB430      B4F9 LOOKUP     B4FB TRYAGN     B516 GB44E      B520 FOUND      
B521 SEARCH     B53B NEXT       B555 GB48D      B560 GB498      B569 GB4A1      
B588 GB4C0      B58E GB4C6      B599 GB4D1      B5A5 NXTPHR     B5B0 GB4E8      
B5B5 LOADAD     B5E7 READAD     B5FF STDATA     B60F WAIT       B61A SETRW      
B621 ERRSSL     B625 MOVES      B628 MOVESA     B64D MOVESX     B653 MOVESB     
B66B MOVESN     B66E MOVESC     B679 MTYPES     B681 MTYPE      B68B MTYPE0     
B693 MTYPE1     B6A1 MTYPE2     B6AE MTYPE3     B6B8 MTYPE4     B6C1 MTYPE5     
B6D0 MTYPE6     B6DE MTYPE7     B6E8 MTYPE8     B6F0 MTYPE9     B6FE MTYPEA     
B70B MOVESD     B712 HEX        B715 HEXAGN     B760 HEXNS      B768 HEXNS2     
B772 HEXSTR     B789 HEXS4      B792 HEXS3      B798 HEXS2      B7A1 HEXS1      
B7A7 HEXS0      B7B5 HEXDON     B7BC HEXSN      B7CD HEXSN2     B7DC HEXSN3     
B7E9 HEXSN4     B7EC RXBIO      B7EF IOAGN      B80D SOG        B812 SOV        
B817 CRUI       B832 CRUI16     B842 CRUO       B858 CRUO16     B867 CRUO8      
B86C CSW        B874 CSR        B87C CSV        B882 IODONE     B889 CRUTMP     

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0085 
EQUATES EXEC-359
B891 CRUSET     B8A7 CSLOAD     B8B1 HVPNUM     B8BF HVPUTN     B8D3 HPUT       
B8D6 HPAGIN     B8E4 HPUTS      B8EA HPUTLP     B8F4 HPOUT      B8FB VPUT       
B8FE VPAGIN     B90C VPUTS      B912 VPUTLP     B925 VPOUT      B92C HVGETS     
B944 HGET       B947 HAGAIN     B94A LP2        B954 HDONE      B95E VGET       
B961 VAGAIN     B964 LP1        B977 VDONE      B981 GMOT       B984 GMAGN      
B98F GMO1       B99E GMO2       B9AA GMO3       B9B8 RMOT       B9BB RMAGN      
B9CA NXALL      B9D2 NOALL      B9E1 RMALL      B9E9 RMOTLP     B9FB J1         
B9FD J2         BA09 J3         BA14 S1ET9F     BA1B INV        BA1E INVAGN     
BA37 INOALL     BA45 INVLP      BA51 INVNOK     BA58 SSDSLL     BA63 SWCHR      
BA66 SWCHAG     BA95 DUPCHR     BA98 DCHAGN     BAB6 S00T10     BABD SWCLR      
BAC1 SCOL10     BAF1 SCOL20     BB1E DUPCLR     BB22 DCOL10     BB48 DCOL20     
BB6D CPUPGM     BB79 EXECUT     BB7C EXAGN      BB9D LINKST     BBA9 LINKSU     
BBB9 LINKSV     BBC5 LINKSW     BBCD RXBNEW     BBD6 LINKSX     BBE2 BIASAG     
BBF1 BIASLP     BBFE BIASM      BC01 BIASSV     BC12 LINKSY     BC1F LINKSZ     
BC2D LINKT1     BC36 XEAED      BC3A LINKT2     BC41 EASAVE     BC61 EAMENU     
BC67 LINKT3     BC6E XBMENU     BC78 LINKT4     BC80 LINKT5     BC8A XBPGM      
BCBB RXBXBP     BCC3 RXBRUN     BCC6 LINKT6     BCDB RXBFIL     BCFD ZKEY       
BD07 KEYJOY     BD27 KEYSTR     BD35 RSCAN      BD3E RSCAN0     BD41 RSCAN1     
BD45 RSCAN2     BD5B RSCAN3     BD5C RSCAN4     BD61 RSCAN5     BD68 ZONKEY     
BD78 GOTON0     BD86 ONLP       BDA3 ONKEY1     BDB3 GKEY1      BDBA GKEY2      
BDCE GKEY3      BDDF JOYST      BDE2 JOYRPT     BE15 ZJOYST     BE18 JOYAGN     
BE25 SUBRTN     BE26 ERRFE      BE2A DSKDSR     BE35 DSRDSS     BE4D GCHARA     
BE54 SPGS       BE6E SPGSA      BE81 SPGS1      BE8C SPGS2      BE98 SPGS3      
BEA1 SPGS4      BEA6 SPAR       BEB0 SPAR1      BEC8 SPAR2      BECD CPAR2      
BED3 ZSCOI      BED6 COINLP     BEE2 NR         BEE5 AR         BEE8 ZSDIST     
BEEB DISLP      E025 GE025      

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0086 
EQUATES EXEC-359
Symbol Table #4 (Def,alpha)  
0034 ACCTON     835C ARG        0032 ATN        0036 BADTON     003B BITREV     
0012 CFI        0014 CNS        002C COS        0010 CSN        8372 DATSTK     
0001 DIVZER     0003 ERRIOV     0006 ERRLOG     0005 ERRNIP     0002 ERRSNN     
0004 ERRSQR     0028 EXP        834A FAC        0006 FADD       000A FCOMP      
0009 FDIV       0008 FMUL       836C FPERAD     0007 FSUB       0038 GETSPACE   
0022 INT        0010 LINK       0018 LOCASE     002A LOG        8370 MEMSIZ     
003D NAMLNK     8300 PAD        0024 PWR        0012 RETURN     000B SADD       
000F SCOMP      000E SDIV       8375 SGN        002E SIN        000D SMUL       
8400 SOUND      0026 SQR        000C SSUB       837C STATUS     0016 STCASE     
8373 SUBSTK     0030 TAN        0007 TRIGER     004A UPCASE     836E VSPTR      
0001 WRNOV      837F XPT        837E YPT        

99/4 GPL-ASSEMBLER (Pass 3) correct                                   PAGE 0087 
EQUATES EXEC-359
Symbol Table #8 (Def,value)  
0001 DIVZER     0001 WRNOV      0002 ERRSNN     0003 ERRIOV     0004 ERRSQR     
0005 ERRNIP     0006 ERRLOG     0006 FADD       0007 FSUB       0007 TRIGER     
0008 FMUL       0009 FDIV       000A FCOMP      000B SADD       000C SSUB       
000D SMUL       000E SDIV       000F SCOMP      0010 CSN        0010 LINK       
0012 CFI        0012 RETURN     0014 CNS        0016 STCASE     0018 LOCASE     
0022 INT        0024 PWR        0026 SQR        0028 EXP        002A LOG        
002C COS        002E SIN        0030 TAN        0032 ATN        0034 ACCTON     
0036 BADTON     0038 GETSPACE   003B BITREV     003D NAMLNK     004A UPCASE     
8300 PAD        834A FAC        835C ARG        836C FPERAD     836E VSPTR      
8370 MEMSIZ     8372 DATSTK     8373 SUBSTK     8375 SGN        837C STATUS     
837E YPT        837F XPT        8400 SOUND      
